2013-08-29 164 views
1

我有可靠地生成異常的代碼。這是預期的,所以我不希望它出現在我的腳本結尾,當我轉儲$ error變量來查找實際問題時。不可捕捉異常(PowerShell)

第1步是找到這個異常並處理它,對吧?我不能那麼遠。這裏是我的本錢:

Function Add-PowerShellSnapIn($SnapInName){ 
    Try{ 
     if ((Get-PSSnapin -Name $SnapInName) -eq $null){ 
      Write-Warning "SnapIn Is Not Already Loaded" 
     } 
    }Catch [System.Exception]{ 
     Write-Warning "Error Caught" 
    } 
} 

Add-PowerShellSnapIn -SnapInName "Microsoft.Exchange.Management.PowerShell.Admin" 

如果我運行此代碼,可以看我的例外,但我從來沒有看到我的小「寫警告」測試消息,表明Catch塊捕捉到的異常。我必須在這裏錯過一些東西。這裏是我看到的例外:

Get-PSSnapin:找不到匹配模式'Microsoft.Exchange.Management.PowerShell.Admin'的Windows PowerShell管理單元。檢查模式,然後再次嘗試該命令。 在C:\用戶\ myuser的\桌面\ Test.ps1:4字符:20 + IF((GET-PSSnapin < < < < -Name $ SnapInName)-eq $ NULL){ + CategoryInfo:InvalidArgument:(微軟.Excha ... owerShell.Admin:字符串)[獲取-PSSnapin],PSArgumentException + FullyQualifiedErrorId:NoPSSnapInsFound,Microsoft.PowerShell.Commands.GetPSSnapinCommand

編輯:預先感謝任何人誰花時間幫我出來了!

回答

6

您應該將-ErrorAction stop添加到您的Get-PSSnapin以進入捕獲塊。

Function Add-PowerShellSnapIn($SnapInName){ 
    Try{ 
     if ((Get-PSSnapin -Name $SnapInName -ErrorAction Stop) -eq $null){ 
      Write-Warning "SnapIn Is Not Already Loaded" 
     } 
    }Catch [System.Exception]{ 
     Write-Warning "Error Caught" 
    } 
} 

Add-PowerShellSnapIn -SnapInName "Microsoft.Exchange.Management.PowerShell.Admin" 
+0

就是這樣,謝謝! – JLA