2013-07-22 57 views
3

有沒有辦法在foreach循環中捕獲並保存壞名字?我有以下幾點:Powershell中的Foreach錯誤處理

$CollectionName = "Import Test" 
$PCName = Import-Csv "C:\Powershell\import_test.csv" 
foreach($computer in $PCName) { 
Add-CMDeviceCollectionDirectMembershipRule -CollectionName $CollectionName -ResourceID $(Get- CMDevice -Name $computer.computername).ResourceID 
} 

我想要做的是,如果在CSV不好的名字,那麼不是顯示「無法驗證參數」的錯誤,我目前得到的,只是輸出失敗名字的一個文本文件。

謝謝

+0

你玩過'-ErrorAction'嗎?另外,下面是關於在powershell中捕獲異常的頁面:http://stackoverflow.com/questions/4691874/powershell-2-0-and-how-to-handle-exceptions – 2013-07-22 20:19:36

回答

5

是的。放在一個try..catch塊循環內的聲明(S):

foreach($computer in $PCName) { 
    try { 
    Add-CMDeviceCollectionDirectMembershipRule ... 
    } catch { 
    "Bad name: $name" | Out-File 'C:\bad_names.txt' -Append 
    } 
} 

如果錯誤是一個非終止錯誤(即顯示錯誤消息,但沒有被抓到try..catch),你可以把它通過將-ErrorAction Stop添加到命令或設置$ErrorActionPreference = "Stop"來導致終止錯誤。

+0

謝謝,完美的作品。我已閱讀關於嘗試抓住,但以前沒有使用它們。 – Michael