Powershell尝试捕获写入错误到外部txt文件

时间:2017-05-08 18:51:27

标签: powershell debugging office365 exchange-server

我有一个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
    }
}

但它没有发现错误。

是否有任何指令可以将错误捕获到外部文件中?

任何解决方案都会有所帮助。

3 个答案:

答案 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