Eu nunca resolvi isso. Eu acabei fazendo UOs sob o recipiente maior e executando isso contra 1k contas de cada vez.
Infelizmente, isso continuará sendo um mistério, já que esse ambiente não existe mais.
Estamos mudando para o WDS para implantação, portanto, estou escrevendo um script do PowerShell que fará o ping em um computador e, se responder, obterá seu endereço MAC e definirá o campo netbootGUID no Active Directory. Ele roda e funciona ... por um tempo e depois retorna:
Get-ADComputer : The server has returned the following error: invalid enumeration context. At \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 : The server has returned the following error: invalid enumeration context.,Microsoft.ActiveDirectory.Management.Commands.GetADComputer
Este é o script:
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 = ""
}
Não tenho ideia do motivo pelo qual estou recebendo esse erro ou o que isso significa. Meu GoogleFu está falhando comigo hoje.
NB: Eu não sou um guru do PS
Meu google fu apresentou o link a seguir .
Em suma, acho que tem algo a ver com a parte -ResultSetSize $null
do script. No link, o OP usava -notlike "*"
em vez do -eq "$Null"
Talvez brincar com essa parte do roteiro e ver o que acontece.
Eu gosto dos comandos get-adcomputer e quest-active directory para casos em que preciso de muitas informações em um servidor, mas, caso contrário, permaneço com os comandos do diretório ativo dsquery
e dsget
, porque eu acho o get-adcomputer
e especialmente os comandos quest
desnecessariamente lentos, embora algo possa estar exigindo que você não use esses comandos ds
. Se você tiver acesso a esses comandos, isso pode valer a pena, mesmo que seja apenas uma mensagem de erro diferente, pois ignora o uso de get-adcomputer e o método existente para determinar a capacidade de ping (tipo Mickey). -Mouse, mas às vezes assim fornece informações adicionais) -
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...
}
Fui desempregado nos últimos dois meses e não tenho acesso a uma máquina Windows, portanto, o código está fora do meu limite, mas espero que funcione para você. Parece certo.
Espero que você tenha resolvido o problema, mas se não, espero que isso ajude de alguma forma.
Boa sorte! :)
Eu tentaria jogar com o parâmetro ResultPageSize com base nessa postagem . Talvez configurando algumas centenas de resultados por vez.