1

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

那么第一步是找到这个异常并处理它,对吧?我不能走那么远。这是我所拥有的:

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

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

4

1 回答 1

6

你应该添加-ErrorAction stop到你Get-PSSnapin的进入 Catch 块。

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"
于 2013-08-29T01:38:39.553 回答