2017-05-08 224 views
0

我有一個PowerShell腳本來禁用Office 365中的郵件轉發使用CSV文件。我想將所有錯誤都捕捉到外部的Txt文件中。 這是我的代碼:Powershell嘗試將寫入錯誤捕獲到外部txt文件

$Groups | 
ForEach-Object { 
    $PrimarySmtpAddress = $_.PrimarySmtpAddress 
    try { 
     # disable Mail forwarding 
     Set-Mailbox -Identity $PrimarySmtpAddress -ForwardingSmtpAddress $Null 
    } 
    Catch { 
     $PrimarySmtpAddress | Out-File $logfile -Append 
    } 
} 

但它沒有發現錯誤。

是否有任何指令來捕獲外部文件的錯誤?

任何解決方案都會有所幫助。

+2

'Write-Host'繞過管道。如果您必須使用'Out-Default',或者只是將字符串輸入到Out-File' cmdlet。如果'Set-Mailbox'沒有拋出錯誤,則需要更深入地調查另外一個問題。 –

+1

「Try/Catch」塊僅在終止錯誤時起作用,因此如果該cmdlet拋出錯誤,但僅僅移動此錯誤將不起作用。您可能需要將'-ErrorAction Stop'添加到您的'Set-Mailbox' cmdlet。另外,正如Jeff Zeitlin所說,'Write-Host' cmdlet並沒有把事情弄糟。在你的'Catch'塊添加一個新行,將信息輸出到你的文本文件中。 – TheMadTechnician

+0

我已經刪除了寫主機,仍然無法正常工作 – ysfibm

回答

1

從傑夫·蔡特林的和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 
    } 
} 
+0

我試過了代碼,但仍然不起作用 – ysfibm

+0

以何種方式「仍然無法工作?」 – lit

0

試試這個:

$ErrorMessage = $_.Exception.Message 
    #or $ErrorMessage= $Error[0].Exception.Message 
    if($ErrorMessage -ne $null) { 
     ... Your custom code 
    } 
0

的Exchange Online(又名O365)不接受你的catch語句拋出的錯誤上班。我們不得不設置

$global:ErrorActionPreference=Stop 

獲得錯誤對象返回

注:我們實現了這個用在功能

$saved=$global:ErrorActionPreference 
$global:ErrorActionPreference=Stop 

開始以下,並在年底恢復設置函數使用

$global:ErrorActionPreference=$saved