无法捕获的异常(PowerShell)

时间:2013-08-29 00:23:29

标签: exception powershell try-catch

我有可靠地生成异常的代码。这是预期的,因此当我转储$ error变量以查找实际问题时,我不希望它出现在我的脚本末尾。

第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:\ users \ myuser \ Desktop \ Test.ps1:4 char:20 + if((Get-PSSnapin<<<< -Name $ SnapInName)-eq $ null){     + CategoryInfo:InvalidArgument:(Microsoft.Excha ... owerShell.Admin:String)[Get-PSSnapin],PSArgumentException     + FullyQualifiedErrorId:NoPSSnapInsFound,Microsoft.PowerShell.Commands.GetPSSnapinCommand

编辑:提前感谢任何花时间帮助我的人!

1 个答案:

答案 0 :(得分:6)

您应该将-ErrorAction stop添加到Get-PSSnapin以进入Catch Block。

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"