Dê uma olhada nisso:
Eu quero testar a existência de uma conta de computador no Active Directory com o PowerShell usando apenas ferramentas da Microsoft.
Usando os cmdlets da Quest AD, posso fazer isso:
if (!(get-qadcomputer $name)){ Stuff }
Isso não funciona com get-adobject
ou get-adcomputer
até onde eu sei.
Existe algo simples que estou perdendo? Eu vi algumas soluções de aparência hacky que prendem todas as exceções que são lançadas, mas parece que isso poderia fornecer alguns falsos positivos sob certas circunstâncias.
$c = Get-ADComputer <$ComputerName>
if($c -eq $null) { ItDoesntExist } else { ItLives }
Isso deve fazer exatamente o que você precisa ... você disse que não está funcionando para você, por que exatamente?
Desculpe, parece que esse cmdlet lança uma exceção em vez de simplesmente retornar $null
, conforme documentado aqui ... e também ignora o parâmetro -erroraction
(role até os comentários na página vinculada).
Solução alternativa sugerida:
$errorActionPreference = "SilentlyContinue"
Get-ADComputer <$ComputerName>
Ou melhor, veja minha outra resposta.
Tente excluí-lo e leia o código de retorno para isso?
(Brincadeira. Mais ou menos.)
Para testar um objeto AD em geral por DistinguishedName, você pode usar o seguinte:
[bool](Get-ADObject -Filter {DistinguishedName-eq "CN=Users,DC=domain,DC=local"})
Ou, quando você quiser pesquisar por outra propriedade, como samaccountname:
[bool](Get-ADObject -Filter {sAMAccountname -eq "Administrator"})
Ambos retornarão apenas um booleano ($ true ou $ false) e podem ser usados em lógica condicional (if / else, etc).