Ошибка get-adcomputer: "Неверный контекст перечисления" при запуске сценария powershell

Мы переключаемся на WDS для развертывания, поэтому я пишу сценарий powershell, который пингует компьютер и, если он отвечает, получает его MAC-адрес и устанавливает поле netbootGUID в Active Directory. Он работает и работает... некоторое время, а затем возвращает:

Get-ADComputer: сервер возвратил следующую ошибку: недопустимый контекст перечисления. В \ Path \ To \ Scripts \ setNetbootGUIDremoteComputers.ps1: 3 char: 15

  • get-adcomputer <<<< -Filter * -searchbase "OU = Somehwere, DC = My, DC = AD, DC = TLD" -ResultSetSize $ null | foreach-object {
    • CategoryInfo: NotSpecified: (:) [Get-ADComputer], ADException
    • FullyQualifiedErrorId: сервер возвратил следующую ошибку: недопустимый контекст перечисления.,Microsoft.ActiveDirectory.Management.Commands.GetADComputer

Это скрипт:

import-module ActiveDirectory

get-adcomputer -Filter * -searchbase "OU=Somewhere,DC=MY,DC=AD,DC=TLD" -ResultSetSize $null | foreach-object {

    $strComputer = $_.Name
    $ping = new-object System.Net.NetworkInformation.Ping
    $Reply = $ping.send($strComputer)

    if ($Reply.status –eq “Success”){
            $colItems = GWMI -cl "Win32_NetworkAdapterConfiguration" -name "root\CimV2" -comp $strComputer -filter "IpEnabled = TRUE"

            ForEach ($objItem in $colItems) {
                $MAC = $objItem.MacAddress.Replace(":", "") 
                Write-Host "Machine Name: " $strComputer
                Write-Host "MAC Address:" $MAC                          
                [guid]$nbGUID = "00000000-0000-0000-0000-$MAC"        
                $comp = get-adcomputer $strComputer -Properties netbootGUID
                $comp.netbootGUID = $nbGUID.ToByteArray()
                set-adcomputer -Instance $comp
                write-output "$strComputer" | out-file -filePath c:\somewhere\guidSet.txt -append
            }
    }
    else {
        write-output "$strComputer" | out-file -filePath c:\somewhere\offline.txt -append
    }
    $Reply = ""



}

Я понятия не имею, почему я получаю эту ошибку или что это значит. Мой GoogleFu подводит меня сегодня.

4 ответа

Мне нравятся команды каталогов get-adcomputer и quest-active для случаев, когда мне нужно много информации на сервере, но в остальном придерживаются команд активного каталога dsquery а также dsgetпотому что я нахожу get-adcomputer и особенно quest Команды излишне медленные, хотя что-то может потребовать от вас не использовать эти ds команды. Если у вас есть доступ к этим командам, это, возможно, стоит попробовать, даже если оно просто выдаст вам другое сообщение об ошибке, поскольку оно игнорирует использование get-adcomputer и существующий метод определения способности ping (вроде Микки -Мыши, но иногда этот способ дает дополнительную информацию) -

dsquery computer ou=Somewhere,dc=My,dc=AD,dc=TLD | ?{$_ -imatch "cn=([^,]+,),"} | % {
    $your_computer = $Matches[1]
    $cannot_ping_computer = $false

    # similarly for the ping command, but should be it's own little function
    ping $your_computer | ?{$_ -imatch "\s*Packets: Sent = (\d+), Received = (\d+)" }|% {
      # or whatever conditions you find satisfactory
      if ($Matches[1] -ne $Matches[2]) $cannot_ping_computer = $true
    }
    if ( $cannot_ping_computer ) {
      #command to jump to next element in pipe, I cannot recall >.<      
    }
    # rest of your code...
}

Последние пару месяцев я не работал и не имел доступа к машине с Windows, поэтому код мне не по плечу, но я надеюсь, что он сработает для вас. Кажется правильным.

Я надеюсь, что вы решили проблему, но если нет, я надеюсь, что это может как-то помочь.

Удачи!:)

Я бы попробовал поиграть с параметром ResultPageSize на основе этого поста. Возможно, установив несколько сотен результатов одновременно.

NB: я не гуру PS

Мой гугл фу обнаружил следующую ссылку.

Короче говоря, я думаю, что это как-то связано с вашим -ResultSetSize $null часть сценария. В ссылке используется ОП -notlike "*"вместо -eq "$Null"

Возможно, поиграйте с этой частью сценария и посмотрите, что произойдет.

Я никогда не решал это. Я закончил тем, что сделал OU под большим контейнером и запустил это для учетных записей 1k за раз.

К сожалению, это останется загадкой, так как эта среда больше не существует.

Другие вопросы по тегам