我有一个PowerShell脚本,可以使用CSV文件禁用Office 365中的电子邮件转发。我想将所有错误捕获到外部Txt文件。 这是我的代码:
$Groups |
ForEach-Object {
$PrimarySmtpAddress = $_.PrimarySmtpAddress
try {
# disable Mail forwarding
Set-Mailbox -Identity $PrimarySmtpAddress -ForwardingSmtpAddress $Null
}
Catch {
$PrimarySmtpAddress | Out-File $logfile -Append
}
}
但它没有发现错误。
是否有任何指令可以将错误捕获到外部文件中?
任何解决方案都会有所帮助。
答案 0 :(得分:1)
来自Jeff Zeitlin和TheMadTechnician的评论,内联评论中注明了变化:
$Groups | ForEach-Object {
$PrimarySmtpAddress = $_.PrimarySmtpAddress
Try {
# disable Mail forwarding
#Added ErrorAction Stop to cause errors to be terminating
Set-Mailbox -Identity $PrimarySmtpAddress -ForwardingSmtpAddress $Null -ErrorAction Stop
}
Catch {
#Removed Write-Host as Write-Host writes to the host, not down the pipeline, Write-Output would also work
"$PrimarySmtpAddress" | Out-File $logfile -Append
}
}
答案 1 :(得分:0)
试试这个:
$ErrorMessage = $_.Exception.Message
#or $ErrorMessage= $Error[0].Exception.Message
if($ErrorMessage -ne $null) {
... Your custom code
}
答案 2 :(得分:0)
Exchange Online(a.k.a O365)不承认您的catch语句的抛出错误。我们不得不设置
$global:ErrorActionPreference=Stop
获取错误对象返回
注意:我们在函数开头
使用以下内容实现了这一点$saved=$global:ErrorActionPreference
$global:ErrorActionPreference=Stop
并使用
恢复功能结束时的设置$global:ErrorActionPreference=$saved