【问题标题】:PowerShell try-catch isn't workingPowerShell tr​​y-catch 不起作用
【发布时间】:2018-02-09 13:38:21
【问题描述】:

我正在编写脚本并想检查是否存在任务名称。 到目前为止看起来像这样:

try {
    Get-ScheduledTaskInfo -TaskName "taskname"
}
catch {
    echo "doesn't exist"
}

当我运行代码时,它会打印错误消息而不是“不存在”:

PS C:\Windows\system32> try {
    Get-ScheduledTaskInfo -TaskName "taskname"
}
catch {
    echo "doesn't exist"
}
Get-ScheduledTaskInfo : The system cannot find the file specified.
At line:2 char:5
+     Get-ScheduledTaskInfo -TaskName "taskname"
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (PS_ScheduledTask:Root/Microsoft/...S_ScheduledTask) [Get-ScheduledTaskInfo], CimException
    + FullyQualifiedErrorId : HRESULT 0x80070002,Get-ScheduledTaskInfo

有人知道为什么不触发流行语吗?

感谢您的帮助!

最好的问候

【问题讨论】:

    标签: powershell try-catch


    【解决方案1】:

    try/catch only catches terminating errors:

    使用 Try、Catch 和 finally 块来响应或处理脚本中的终止错误

    使用-ErrorAction Stop 将非终止错误转换为终止错误:

    Get-ScheduledTaskInfo -TaskName "taskname" -ErrorAction Stop
    

    【讨论】:

    • 好主意...我用它来让 PS 表现得更像一种更传统的语言
    【解决方案2】:

    您可以将全局变量参数 $ErrorActionPreference 设置为停止(详情:here)。没有必要在使用此方法的所有命令上加上 -Erroraction ;)

    $ErrorActionPreference= "Stop"
    
    try {
        Get-ScheduledTaskInfo -TaskName "taskname"
    }
    catch {
        echo "doesn't exist"
    }
    

    【讨论】:

      猜你喜欢
      • 2011-10-10
      • 2020-02-09
      • 1970-01-01
      • 1970-01-01
      • 2015-12-14
      • 2022-12-03
      • 1970-01-01
      • 2019-06-29
      • 1970-01-01
      相关资源
      最近更新 更多