首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Try-catch问题powershell

Try-catch问题powershell
EN

Stack Overflow用户
提问于 2013-09-02 20:10:40
回答 1查看 2.9K关注 0票数 2
代码语言:javascript
复制
function Test($cmd)
{
          Try
         {
                  Invoke-Expression $cmd -ErrorAction Stop
         }
         Catch
         {
                  Write-Host "Inside catch"
         }

         Write-Host "Outside catch"
}

$cmd = "vgc-monitors.exe"  #Invalid EXE
Test $cmd

$cmd = "Get-Content `"C:\Users\Administrator\Desktop\PS\lib\11.txt`""
Test $cmd

第一次使用$cmd =“vgc-monitors.exe ors.exe”调用Test() (此exe在系统中不存在)

*异常捕获成功

*文本“内部捕捉”“外部捕捉”打印

使用$cmd = "Get-Content "C:\Users\Administrator\Desktop\PS\lib\11.txt""再次调用Test() (指定路径中不存在11.txt)

*未捕获异常

*文本"Inside catch“未打印”

*获取以下错误信息

代码语言:javascript
复制
Get-Content : Cannot find path 'C:\Users\Administrator\Desktop\PS\lib\11.txt' because it does not exist.
At line:1 char:12
+ Get-Content <<<<  "C:\Users\Administrator\Desktop\PS\lib\11.txt"
    + CategoryInfo          : ObjectNotFound: (C:\Users\Admini...p\PS\lib\11.txt:String) [Get-Content], ItemNotFoundEx
   ception
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetContentCommand

问题:

我希望捕获第二个异常。我找不出代码中的错误。

谢谢

Jugari

EN

回答 1

Stack Overflow用户

发布于 2013-09-02 22:01:04

您正在对Invoke-Expression应用-ErrorAction Stop,它可以很好地执行。要使错误操作指令应用于被调用的表达式,您需要将其附加到$cmd

代码语言:javascript
复制
Invoke-Expression "$cmd -ErrorAction Stop"

或设置$ErrorActionPreference = "Stop"

代码语言:javascript
复制
$eap = $ErrorActionPreference
$ErrorActionPreference = "Stop"
try {
  Invoke-Expression $cmd
} catch {
  Write-Host "Inside catch"
}
$ErrorActionPreference = $eap

后者是更健壮的方法,因为它不会对$cmd做出假设。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18572949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档