2013-07-08 84 views
3

我目前在我的PowerShell腳本中遇到問題日誌記錄異常。我正在嘗試將文件複製到C:\ Windows \ System32,並且如果錯誤發生,我想將錯誤行添加到我的日誌文件中。到目前爲止,我嘗試了這兩種方法。PowerShell中的異常日誌記錄

例1:

$LogPath = "C:\Test.txt 
$scriptPath = split-path -parent $MyInvocation.MyCommand.Definition 

Copy-Item $scriptPath\Devcon.exe C:\Windows\System32 -ErrorAction SilentlyContinue -ErrorVariable $Errors 

Foreach($error in $Errors) 
{ 
    add-content -Path $LogPath -Value $($error.Exception) -Force 
} 

例2:

$LogPath = "C:\Test.txt 
$scriptPath = split-path -parent $MyInvocation.MyCommand.Definition 

Try{ 
    Copy-Item $scriptPath\Devcon.exe C:\Windows\System32 
} 
Catch [System.Exception] 
{ 
    add-content -Path $LogPath -Value "There was an error why trying to copy the file." -Force 
    add-content -Path $LogPath -Value $Error -Force 
} 

我可以將項目添加到日誌文件中,所以我知道它不是一個權限問題與文件。我錯過了什麼?

+1

方法1不適用於這些變量名稱。 '$ error'是一個保留的自動變量名稱,用於存儲全局錯誤列表,不能將其用作循環變量。一般來說,@Neolisk是正確的,你需要將'ErrorAction'設置爲'Stop'來強制執行。如果你改變你的變量名稱(例如'foreach($ err in $ errors)'),你可能仍然可以使用整體方法#1,如果你喜歡。 – latkin

回答

3

我相信你得到的錯誤是無法終止的。這就是爲什麼它不會在一個catch塊中結束。

試試這個,而不是你拷貝產品線:

Copy-Item $scriptPath\Devcon.exe C:\Windows\System32 -ErrorAction Stop 

Help on ErrorAction (MSDN)

+1

修復了它。非常感謝。 – cdouglas10683