使用Try的Powershell函数... Catch没有使它进入函数,因为参数导致错误

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (16)

我正在尝试使用一个函数来确认或否认我们是否通过了一个没有错误的cmdlet - 我正在运行一堆AD / Exchange cmdlet并在最后存储/输出结果到.csv 。我忘了导入Exchange模块,这对我有利,因为它以我在使用Get-DistributionList时没想到的方式终止。

我试过用$?代替Try..Catch,强制EA停止,并首先将参数存储在变量中,但由于未安装模块且无法识别cmdlet,因此只停止该程序。

这基本上就是我想做的事情:

function Test-Success ($cmdlet){
    try{
          $cmdlet
          "Y"
    } catch {
          "Err -- Perform manually."
    }
}

Test-Success(Get-DistributionList)

但我收到以下错误,脚本停止:

Get-DistributionList : The term 'Get-DistributionList' is not recognized as the name of a cmdlet, function, script
file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct
and try again.
At line:46 char:10
+ Test-Success(Get-DistributionList)
+          ~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (Get-DistributionList:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

最糟糕的情况是,我可以在每次放置try ... catch,因为它似乎以这种方式工作(例如:)

try {
     Get-DistributionList
     "y"
} catch {
     "Err -- Perform manually"
}

任何帮助都表示赞赏!我希望有一个解决方法,以便在cmdlet以这种方式失败时它不会终止程序,但我对PowerShell并不十分熟悉,而且我自己的搜索没有结果。

提问于
用户回答回答于

如果您只是想查看命令是否存在,您应该使用Get-Command@DimplesMcGibble建议。如果您尝试执行该命令,则可以将命令名称作为字符串传递并使用invoke-operator

function Test-Success ($cmdlet){
    try{
          & $cmdlet
          "Y"
    } catch {
          "Err -- Perform manually."
    }
}

Test-Success 'Get-DistributionList'
用户回答回答于

您应该可以使用Get-Command以检查是否存在给定的cmdlet而不使用try\catch

扫码关注云+社区

领取腾讯云代金券