2015-06-11 58 views
1

我有一個簡單的腳本來刪除一個文件,我知道這可能是更強大的,但在這裏它是PowerShell的錯誤記錄

$LogFile = ".\deleteRegPol.log" 

try 
{ 
    Remove-Item "c:\test\new text document.txt" -force 
    Add-Content $LogFile -Value "We ran the command" 
} 
catch [Exception] 
{ 
    Add-Content $LogFile -Value $_ 
} 
finally 
{ 
} 

當我試圖刪除不存在的文件,我得到在命令行中出現錯誤,但在我的日誌文件中,它表示命令已運行。這告訴我,沒有拋出異常,導致流向catch塊。爲什麼不?

回答

2

PowerShell不正常拋出異常當出現錯誤時。相反,它將一條記錄寫入錯誤流,您可以重定向。強迫它有兩種選擇。一是設置全局錯誤偏好停止:

$ErrorActionPreference = "Stop" 

另一種是設置ErrorAction參數停止。這是支持接受所謂的常用參數的cmdlet,其中刪除,項目做:

Remove-Item "c:\test\new text document.txt" -force -EA "Stop" 

重定向您使用的代碼2的錯誤流:

Remove-Item "c:\test\new text document.txt" -Force 2>> $LogFile 

這將追加錯誤到日誌文件。但是,如果您的選項是「停止」,則記錄不會寫入錯誤流。它只是包含在拋出的異常中。

+0

並非PowerShell通常不會引發異常,而是區分兩種類型的錯誤:終止錯誤和非終止錯誤。前者投擲而後者不投擲。通過將'-ErrorAction'或'$ ErrorActionPreference'設置爲'Stop',您可以指示解釋器將所有錯誤視爲終止錯誤。 –