2012-04-07 58 views
2

我正在編寫腳本並希望控制錯誤。然而,即時通訊使用try,catch發現錯誤處理的信息很麻煩。我想捕獲特定的錯誤(如下所示),然後執行一些操作並恢復代碼。這需要什麼代碼?Powershell:使用try和catch進行錯誤處理

這是我正在運行的代碼,即時提示輸入無效的用戶名。

Get-WMIObject Win32_Service -ComputerName localhost -Credential (Get-Credential) 



Get-WmiObject : User credentials cannot be used for local connections 
At C:\Users\alex.kelly\AppData\Local\Temp\a3f819b4-4321-4743-acb5-0183dff88462.ps1:2 char:16 
+   Get-WMIObject <<<< Win32_Service -ComputerName localhost -Credential (Get-Credential) 
    + CategoryInfo   : InvalidOperation: (:) [Get-WmiObject], ManagementException 
    + FullyQualifiedErrorId : GetWMIManagementException,Microsoft.PowerShell.Commands.GetWmiObjectCommand 

回答

2

誰能弄清楚爲什麼我不能捕獲該異常試圖類型[System.Management.ManagementException]的異常陷阱是什麼時候?

PowerShell應該能夠捕獲與某些異常類匹配的異常,但即使下面的異常類是[System.Management.ManagementException],它也不會捕獲該catch塊中的異常!

即:

Try 
{ 
    Get-WMIObject Win32_Service -ComputerName localhost -Credential (Get-Credential) -ErrorAction "Stop" 
} 
Catch [System.Management.ManagementException] 
{ 
    Write-Host "System.Management.ManagementException" 
    Write-Host $_ 
    $_ | Select * 
} 
Catch [Exception] 
{ 
    Write-Host "Generic Exception" 
    Write-Host $_ 
    $_ | Select * 
} 

的工作方式相同:

Try 
{ 
    Get-WMIObject Win32_Service -ComputerName localhost -Credential (Get-Credential) -ErrorAction "Stop" 
} 
Catch [Exception] 
{ 
    Write-Host "Generic Exception" 
    Write-Host $_ 
    $_ | Select * 
} 

沒有道理給我。

您也可以捕獲通用異常捕獲塊中的錯誤,然後檢查文本以查看它是否與您之後的文字相匹配,但是有點髒。

1

必須使用-erroraction stop進入the try/catchtrap腳本塊。您可以測試此:

Clear-Host 
$blGoOn = $true 

while ($blGoOn) 
{ 
    trap 
    { 
    Write-Host $_.exception.message 
    continue 
    } 
    Get-WMIObject Win32_Service -ComputerName $computer -Credential (Get-Credential) -ErrorAction Stop 
    if ($?) 
    { 
    $blGoOn=$false 
    } 
} 
+0

感謝您的迅速回復。如何捕獲錯誤消息「用戶憑證不能用於本地連接」?其他錯誤想要用不同的代碼處理。謝謝 – resolver101 2012-04-08 09:52:18

+0

你是對的:「用戶憑證不能用於本地連接」 – JPBlanc 2012-04-08 14:40:37

相關問題