我想知道是否有人可以给我一些通过管道处理非终止错误的提示?
这是我想做的一个例子。
Get-ADUser -Filter {Enabled = 'False'} -Properties Modified | Where Modified -LT (Get-Date).AddDays(-30) | Remove-ADUser -Confirm:$false
基本上找到所有上次修改的时间戳少于30天的禁用用户,然后将其删除。
所以我要寻找的是如何处理和错误(如果发生),以便可以记录下来
我考虑过使用try catch,但是如果发生错误,则整个命令将停止。我希望它是一个非终止错误,以便它将继续处理找到的所有用户,但是然后有一种方法来查看是否存在任何错误,以便我可以记录他们
有什么建议?
最佳答案
您可以在没有Try-Catch构造甚至没有-ErrorAction的情况下使用-ErrorVariable。
因此,例如,您可以这样做:
Get-ADUser -Filter {Enabled = 'False'} -Properties Modified -ErrorVariable Get-ADuserErr |`
Where Modified -LT (Get-Date).AddDays(-30) -ErrorVariable Where-ObjectErr |`
Remove-ADUser -Confirm:$false -ErrorVariable Remove-ADuserErr
If ($Get-ADuserErr) {
Write-Output $Get-ADuserErr }
If ($Where-ObjectErr) {
Write-Output $Where-ObjectErr }
If ($Remove-ADuserErr) {
Write-Output $Remove-ADuserErr }
这样,您可以使用另一个变量来存储每个命令的错误,并获得默认的错误处理行为(通过$ ErrorActionPreference,默认情况下为“Continue”)。
同样,您的错误变量($ Get-ADuserErr,$ Remove-ADuserErr等)是可以通过管道传递到Out-File以将错误记录到文件中的对象。
更好的是,这些错误变量是“ErrorRecord”类型的对象,其对象具有一些属性,例如:TargetObject,Exception,InvocationInfo,fullQualifiedErrorID等。
因此,您可以进一步操作错误变量对象以准确记录所需的内容。
关于powershell - 通过管道处理错误以进行日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25045215/