PowerShell:捕获Active Directory Cmdlets的异常

4

我有一个关于 Powershell 中异常的问题。由于某些原因,它们没有被捕获。

Try { 
    Add-ADGroupMember -Identity $GroupToModify.ObjectGUID -Members $user
} Catch [ADIdentityNotFoundException] {
    #message goes here
}

尝试从不同域添加用户时,输出以下内容:
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

可能是重复的问题:我的PowerShell异常没有被捕获 - Loïc MICHEL
PowerShell 只会捕获终止错误(您必须将 $erroractionpreference 设置为“STOP”)。 - Loïc MICHEL
2个回答

5

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

Try { 
    Add-ADGroupMember -Identity $GroupToModify.ObjectGUID -Members $user -ErrorAction Stop
} Catch [ADIdentityNotFoundException] {
    #message goes here
}

或者在 PowerShell 会话的开头指定 $ErrorActionPreference = "Stop",以便为所有后续的 cmdlet 实现相同的结果。

我在使用 AzAccounts 中的 Connect-AzAccount cmdlet 时遇到了相同的行为,您的建议使我能够捕获异常。为什么会发生这种情况? - ccoutinho
@ccoutinho PS的默认行为是在错误发生时静默继续而不是停止(抛出异常)。请参阅https://www.oreilly.com/library/view/professional-windows-powershell/9780471946939/9780471946939_using_the_dollar_erroractionpreference_v.html。 - Raf
我有点困惑了,到目前为止,我已经成功捕获了无数个异常,但这是第一次我必须传递这个参数才能触发异常。你们有什么想法,为什么会出现这种不稳定的行为? - ccoutinho
1
@ccoutinho,可能是你的shell设置问题,$ErrorActionPreference过去可能已经被设置为“Stop”。 - Raf

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接