私は次のようなコードを少し持っています:
if (Get-ADUser $DN -EA SilentlyContinue) {
# Exists
} else {
# Doesn't Exist
}
残念ながら、Get-ADUser DNがユーザーを見つけられない場合(これは問題ありません。つまり、オブジェクト名が取得されないことを意味します)、例外がスローされ、エラーが出力されます。私はそれが失敗することを知っています、それは大丈夫です、それが私が-ErrorAction
からSilentlyContinue
を持っている理由です。残念ながらそれは何もしないようです...私はまだスクリプト出力でbarfを取得します。コードは機能しますが、コンソールがエラーを吐き出すため、醜いです。
見つからないオブジェクトの例外をキャッチしたいが、アクセスが拒否されたなどの他の理由で失敗したいので、キャッチする正確な例外を指定する必要があります。
try {
Get-ADUser $DN -ErrorAction Stop
# Do stuff if found
} catch [Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException] {
# Do stuff if not found
}
他のユースケースでキャッチする例外タイプを決定するには、例外を発生させてから、次のようにします。
$Error[0].Exception.GetType().FullName
その出力は次のようになります:catch [ここに例外タイプを挿入]
エラーを吐き出すことなく機能していることがわかった唯一の方法は、filterパラメーターを使用することです。
if (Get-ADUser -Filter {distinguishedName -eq $DN} ) {
# Exists
} else {
# Doesn't Exist
}
それは例外です、あなたはちょうどこのようにそれをキャッチしようとすることができます:
$user = $(try {Get-ADUser $DN} catch {$null})
if ($user -ne $null) {
# Exists
} else {
# Doesn't Exist
}
このコマンドは終了エラーを出しているようです。使う try { ... } catch { ... }
エラーを処理/抑制します。
私はこれを次のように行います:
Get-ADUser | ?{$_.id -eq $DN.id}
IDまたはその他の一意の識別子。
これはユーザーまたはnullを返し、例外をラップします。