为什么“尝试/捕获”中的命令有时需要-ErrorAction停止,而有时则不需要?

用户名

在下面的示例中,我要使用进行catch错误处理-ErrorAction Stop在这种情况下,它工作得很好。

try
{
    Import-Module -ErrorAction Stop -Force nomodule.psm1
}
catch
{
    Write-Host -ForegroundColor Red "no module"

    $PSItem >> $env:HOMEPATH\AVSUB.log
    exit 1
}

但是在以下情况下,我没有使用,-ErrorAction Stop并且该catch块仍然运行。

try
{
    $var= broken_function
}
catch
{
   Write-Host -ForegroundColor Red "error"

   $PSItem >> $env:HOMEPATH\AVSUB.log
   exit 1
}

为什么有时需要指定-ErrorAction Stop,有时却不需要?

西蒙斯

PowerShell中存在终止非终止错误。

终止错误是使cmdlet,脚本或程序的执行停止的错误。这将被捕获Try {} Catch {}而无需-ErrorAction Stop

非终止错误使PowerShell可以继续执行。您可以通过添加来捕获它们-ErrorAction Stop

这是两个函数,一个产生终止错误,另一个产生非终止错误。

# This will throw a terminating error
function TerminatingErrorExample {
    [CmdletBinding()]
    Param()
    Throw "I can't run like this!"
    Write-Host "This message will never be displayed, because it's after the terminating error."
}

# This will write a non-terminating error
function NonTerminatingErrorExample {
    [CmdletBinding()]
    Param($i = 5)
    if ($i -gt 4) {
        Write-Error "I expected a value less or equal to 4!"
    }
    Write-Host "However, I can still continue the execution"
}

如果您对我为什么要[CmdletBinding()]在函数中使用感到好奇,那是因为没有它,函数将不支持[<CommonParameters>],并且-ErrorAction Stop是CommonParameter。

现在我们可以将它们包装 Try {} Catch {}

# Because the function produces a terminating error, the Catch block will run
Try {
    TerminatingErrorExample
} Catch {
    Write-Host "I got you!"
}

# Since the error here is non-terminating, the catch block won't run
Try {
    NonTerminatingErrorExample
} Catch {
    Write-Host "You won't see this message"
}

# Now the catch block will run, because we specifically say we want it to stop,
# even on a non-terminating error.
Try {
    NonTerminatingErrorExample -ErrorAction Stop
} Catch {
    Write-Host "Now you see this message."
}

如果运行此命令,则返回的结果将与预期的一样:

I got you!
NonTerminatingErrorExample : I expected a value less or equal to 4!
In Zeile:28 Zeichen:5
+     NonTerminatingErrorExample
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,NonTerminatingErrorExample

However, I can still continue the execution
Now you see this message.

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么jq有时需要过滤器表达式,而有时则不需要过滤器表达式?

来自分类Dev

为什么我有时需要使用JSON.stringify而有时不需要

来自分类Dev

在node.js / Express中,为什么在next()之后有时需要返回语句,而有时却不需要?

来自分类Dev

为什么有时不需要在Lambda中捕获const变量?

来自分类Dev

为什么我有时不需要使用“get”而有时需要使用“get”进行过滤?

来自分类Dev

为什么QEMU的hostfwd选项有时需要root访问,而有时却不需要root访问

来自分类Dev

为什么在 Rails 中有时我需要一个包,有时我不需要?

来自分类Dev

为什么有些库需要嵌入而有些则不需要?

来自分类Dev

为什么在 Rust 中 [有时] 不需要泛型的生命周期说明符?

来自分类Dev

为什么列表结构中的某些功能需要“列表”前缀,而有些则不需要?

来自分类Dev

为什么/为什么有些类需要每个可能的参数,而有些则不需要?

来自分类Dev

为什么有些C#api方法需要[HttpPost]而有些则不需要?

来自分类Dev

为什么有时在ActionBlock中尝试/捕获不能捕获此错误?

来自分类Dev

HELM YAML - 有时需要空格/制表符但有时不需要的数组值?

来自分类Dev

在 PyQT 中为什么有些小部件在调用它们之前需要“self”参数,而有些则不需要

来自分类Dev

在htop的命令列中,有时显示完整路径,有时则不显示。为什么?

来自分类Dev

为什么有些 JavaScript 函数需要创建一个新变量,而有些则不需要?

来自分类Dev

在Node中,为什么“需要”分配有时需要大括号?

来自分类Dev

为什么Visualforce页面需要无效的HTML?(有时)

来自分类Dev

为什么有时需要外部包装箱?

来自分类Dev

为什么OCaml有时需要eta扩展?

来自分类Dev

为什么有时在元字符周围需要空格?

来自分类Dev

为什么在Ruby中有时需要加括号?

来自分类Dev

有人告诉我,有时不需要“()”就可以调用不需要返回的函数,对吗?

来自分类Dev

为什么有时“this”在 Vue 模板中有效而有时无效?

来自分类Dev

为什么对象不需要时Java中的数组需要具有预定义的长度?

来自分类Dev

为什么有时有时需要手动重启路由器?

来自分类Dev

为什么有时有时需要手动导入密钥?

来自分类Dev

为什么有时需要通过kill -9来停止进程

Related 相关文章

  1. 1

    为什么jq有时需要过滤器表达式,而有时则不需要过滤器表达式?

  2. 2

    为什么我有时需要使用JSON.stringify而有时不需要

  3. 3

    在node.js / Express中,为什么在next()之后有时需要返回语句,而有时却不需要?

  4. 4

    为什么有时不需要在Lambda中捕获const变量?

  5. 5

    为什么我有时不需要使用“get”而有时需要使用“get”进行过滤?

  6. 6

    为什么QEMU的hostfwd选项有时需要root访问,而有时却不需要root访问

  7. 7

    为什么在 Rails 中有时我需要一个包,有时我不需要?

  8. 8

    为什么有些库需要嵌入而有些则不需要?

  9. 9

    为什么在 Rust 中 [有时] 不需要泛型的生命周期说明符?

  10. 10

    为什么列表结构中的某些功能需要“列表”前缀,而有些则不需要?

  11. 11

    为什么/为什么有些类需要每个可能的参数,而有些则不需要?

  12. 12

    为什么有些C#api方法需要[HttpPost]而有些则不需要?

  13. 13

    为什么有时在ActionBlock中尝试/捕获不能捕获此错误?

  14. 14

    HELM YAML - 有时需要空格/制表符但有时不需要的数组值?

  15. 15

    在 PyQT 中为什么有些小部件在调用它们之前需要“self”参数,而有些则不需要

  16. 16

    在htop的命令列中,有时显示完整路径,有时则不显示。为什么?

  17. 17

    为什么有些 JavaScript 函数需要创建一个新变量,而有些则不需要?

  18. 18

    在Node中,为什么“需要”分配有时需要大括号?

  19. 19

    为什么Visualforce页面需要无效的HTML?(有时)

  20. 20

    为什么有时需要外部包装箱?

  21. 21

    为什么OCaml有时需要eta扩展?

  22. 22

    为什么有时在元字符周围需要空格?

  23. 23

    为什么在Ruby中有时需要加括号?

  24. 24

    有人告诉我,有时不需要“()”就可以调用不需要返回的函数,对吗?

  25. 25

    为什么有时“this”在 Vue 模板中有效而有时无效?

  26. 26

    为什么对象不需要时Java中的数组需要具有预定义的长度?

  27. 27

    为什么有时有时需要手动重启路由器?

  28. 28

    为什么有时有时需要手动导入密钥?

  29. 29

    为什么有时需要通过kill -9来停止进程

热门标签

归档