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

Проверить наличие объекта AD в PowerShell с помощью только командлетов, предоставленных Microsoft.

Я хочу проверить наличие учетной записи компьютера в 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
}