为什么“尝试/捕获”中的命令有时需要-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

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

为什么Groovy有时有时不需要方法的返回类型(甚至def)?

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

为什么`:type`有时显示`a`,而有时显示`t`?

来自分类Dev

为什么有时显示背景而有时不显示背景?

来自分类Dev

为什么有时在动作参数中需要传递lambda而不是其他时间?

来自分类Dev

为什么AS有时会接受大位移而有时却不接受?

来自分类Dev

为什么Ruby Procs有时会返回而有时却是错误?

来自分类Dev

为什么AS有时会接受大位移而有时却不接受?

来自分类Dev

为什么有些程序需要-h而另一些则不需要

来自分类Dev

为什么有些程序需要安装,而其他程序则不需要?

来自分类Dev

如何在laravel中处理关系,其中不需要外键字段,有时可能会忽略外键字段

来自分类Dev

pip:为什么有时不显示 twine 命令

来自分类Dev

为什么有时在列中得到最后一个变量,而有时在列中得到所有不同的变量?

来自分类Dev

为什么vim有时显示^ M而有时不显示(即使它们在那里)?

Related 相关文章

  1. 1

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

  2. 2

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

  3. 3

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

  4. 4

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

  5. 5

    为什么Groovy有时有时不需要方法的返回类型(甚至def)?

  6. 6

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

  7. 7

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

  8. 8

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

  9. 9

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

  10. 10

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

  11. 11

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

  12. 12

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

  13. 13

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

  14. 14

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

  15. 15

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

  16. 16

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

  17. 17

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

  18. 18

    为什么`:type`有时显示`a`,而有时显示`t`?

  19. 19

    为什么有时显示背景而有时不显示背景?

  20. 20

    为什么有时在动作参数中需要传递lambda而不是其他时间?

  21. 21

    为什么AS有时会接受大位移而有时却不接受?

  22. 22

    为什么Ruby Procs有时会返回而有时却是错误?

  23. 23

    为什么AS有时会接受大位移而有时却不接受?

  24. 24

    为什么有些程序需要-h而另一些则不需要

  25. 25

    为什么有些程序需要安装,而其他程序则不需要?

  26. 26

    如何在laravel中处理关系,其中不需要外键字段,有时可能会忽略外键字段

  27. 27

    pip:为什么有时不显示 twine 命令

  28. 28

    为什么有时在列中得到最后一个变量,而有时在列中得到所有不同的变量?

  29. 29

    为什么vim有时显示^ M而有时不显示(即使它们在那里)?

热门标签

归档