Назад | Перейти на главную страницу

Ошибка get-adcomputer: «Недопустимый контекст перечисления» при запуске сценария PowerShell

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

Get-ADComputer: сервер вернул следующую ошибку: недопустимый контекст перечисления. В \ Path \ To \ Scripts \ setNetbootGUIDremoteComputers.ps1: 3 символа: 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 сегодня подводит меня.

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

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, так что код не в моей голове, но я надеюсь, что он сработает для вас. Кажется правильным.

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

Удачи! :)

NB: Я не гуру PS

Мой гугл фу поднял следующая ссылка.

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

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

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

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

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