PowerShell:捕获 Active Directory Cmdlet 的异常

use*_*653 4 powershell

我有一个关于 Powershell 异常的问题。由于某种原因,他们没有被抓住。

Try { 
    Add-ADGroupMember -Identity $GroupToModify.ObjectGUID -Members $user
} Catch [ADIdentityNotFoundException] {
    #message goes here
}
Run Code Online (Sandbox Code Playgroud)

当尝试从不同的域添加用户时,它会输出:

Get-ADUser : Cannot find an object with identity: 'CN=user,OU=users,
OU=J2,OU=sites,DC=asia,DC=domain,DC=com' under: 'DC=europe,
DC=domain,DC=com'.
At myscript.ps1:753 char:14
+     $adMember = Get-ADUser $user
+                 ~~~~~~~~~~~~~~~~
+ CategoryInfo          : ObjectNotFound: (CN=user...s,DC=com:ADUser) 
[Get-ADUser], ADIdentityNotFoundException
+FullyQualifiedErrorId :
ActiveDirectoryCmdlet:
Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException,
Microsoft.ActiveDirectory.Management.Commands.GetADUser
Run Code Online (Sandbox Code Playgroud)

Raf*_*Raf 5

你有两个选择。-ErrorAction Stop在您想要触发异常的每个 cmdlet 上使用:

Try { 
    Add-ADGroupMember -Identity $GroupToModify.ObjectGUID -Members $user -ErrorAction Stop
} Catch [ADIdentityNotFoundException] {
    #message goes here
}
Run Code Online (Sandbox Code Playgroud)

$ErrorActionPreference = "Stop"在 PS 会话开始时指定,以使所有后续 cmdlet 获得相同的结果。