2013-11-04 55 views
3

我試圖寫一個PowerShell腳本,執行以下操作:如何輸出誤差在PowerShell中的日誌文件複製文件時

  1. 檢查是否在遠程機器上的文件夾(計算機文本列表)存在,如果這樣刪除它。
  2. 將遠程共享中的文件夾複製到同一臺機器,並且如果有錯誤輸出到錯誤日誌文件,則輸出到成功日誌文件。

我已經搜查,但一直未能找到解決我的看似簡單的問題,請參閱我下面的代碼:

$computers=Get-Content C:\pcs.txt 
$source="\\RemoteShare\RemoteFolder" 
$dest="C$\Program Files\Destination" 


    foreach ($computer in $computers) { 

     If (Test-Path \\$computer\$dest){ 
      Remove-Item \\$computer\$dest -Force -Recurse 
       } 
    Copy-Item $source \\$computer\$dest -recurse -force -erroraction silentlycontinue 

    If (!$error) 
{Write-Output $computer | out-file -append -filepath "C:\logs\success.log"} 
Else 
{Write-Output $computer | out-file -append -filepath "C:\logs\failed.log"} 

} 

目前,該腳本運行時,一切都越來越放在失敗.log文件,而不管它是否失敗。

如何在運行for循環時正確處理PowerShell中的錯誤?

回答

5

下面是一個例子。

$array = @(3,0,1,2) 

foreach ($item in $array) 
{ 
    try 
    { 
     1/$item | Out-Null 
     Write-Host "$item is okay" 
    } 
    catch 
    { 
     Write-Host "There was an error! Can't divide by $item!" 
    } 
} 
+3

您可以使用$ _。Message來獲取catch塊中的異常消息。 –

+0

@ChadCarisch是的,我知道。我只是想爲他提供一個例子。 – crownedjitter

4

不要使用$error,它總是包含最新的錯誤對象的數組,即使最後一個命令是成功的。要檢查最後一條命令的結果,請使用$?,如果最後一條命令失敗,它將爲false。

有關這些變量的更多詳細信息,請參見about_Automatic_Variables

+0

'$ error [0]'有什麼問題? –

相關問題