Я хочу проверить наличие учетной записи компьютера в Active Directory с помощью PowerShell, используя только инструменты Microsoft.
Используя командлеты Quest AD, я могу сделать следующее:
if (!(get-qadcomputer $name)){ Stuff }
Это не работает с get-adobject
или get-adcomputer
насколько я могу судить.
Что-то простое, чего мне не хватает? Я видел пару хакерских решений, которые улавливают все генерируемые исключения, но похоже, что при определенных обстоятельствах это может давать ложные срабатывания.
$c = Get-ADComputer <$ComputerName>
if($c -eq $null) { ItDoesntExist } else { ItLives }
Это должно делать именно то, что вам нужно ... вы сказали, что это не работает для вас, почему именно?
К сожалению, похоже, что этот командлет на самом деле вызывает исключение, а не просто возвращает $null
, как задокументировано Вот... а также игнорирует -erroraction
параметр (прокрутите вниз до комментариев на связанной странице).
Предлагаемое решение:
$errorActionPreference = "SilentlyContinue"
Get-ADComputer <$ComputerName>
Или, лучше, посмотрите мой другой ответ.
Посмотри на это:
Попробуйте удалить его и прочитать для этого код возврата?
(Шучу. Вроде.)
Чтобы протестировать объект AD в целом с помощью DistinguishedName, вы можете использовать следующее:
[bool](Get-ADObject -Filter {DistinguishedName-eq "CN=Users,DC=domain,DC=local"})
Или, если вы хотите выполнить поиск по другому свойству, например samaccountname:
[bool](Get-ADObject -Filter {sAMAccountname -eq "Administrator"})
Оба возвращают только логическое значение ($ true или $ false) и могут использоваться в условной логике (if / else и т. Д.).
$errored=$false
try { Add-ADGroupMember -Identity $SomeGroupName $SomeComputer }
catch {
$errored=$true
Write-Output "$SomeComputer does not exist in AD,$_" | Tee-Object $errorLogFileName -Append
}
if ( $errored == $false) {
#either accept the computer is added to $SomeGroupName or delete it back out now that you know $someComputer exists
}