【问题标题】:Errors not ignored in Start-Job InitializationScriptStart-Job InitializationScript 中未忽略的错误
【发布时间】:2011-05-03 22:14:20
【问题描述】:

我有一个脚本模块,其 .psm1 文件运行一个命令,如果某个注册表值不存在,该命令将失败。我想忽略这个失败,所以 .psm1 脚本运行命令为:

CommandThatMayFail -ea SilentlyContinue

当我在 PowerShell 会话中导入模块时,这工作得很好。但是此模块中的功能之一启动了一些同样需要导入模块的 PS 作业。当我在作业的 InitializationScript 中导入模块时,不会忽略来自 CommandThatMayFail 的失败并且作业终止。我尝试将 CommandThatMayFail 包装在 Try/Catch 块中,但这没有任何帮助。

我通过在作业的 ScriptBlock 中而不是 InitializationScript 中导入模块来避免这个问题。但我仍然很好奇这里发生了什么。任何人都可以解释一下吗?

【问题讨论】:

    标签: powershell


    【解决方案1】:

    尝试将陷阱放在与 InitializationScript 相同的范围内,但在代码中将其放在前面:

    Trap{
        <commands you want it to run in case of error>;
        continue
        }
    

    重要的部分是分号和continue。我今天遇到了同样的问题,具有讽刺意味的是,这为我解决了这个问题。我认为这是终止/非终止错误和范围的问题,但这是我可以在自己的脚本中解决它的唯一方法。

    【讨论】:

    • Trap 的效果并不比 try/catch 好(正如我所料)。在我看来,如果 InitializationScript 中出现任何非终止错误,PowerShell 就会失败。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 2018-05-04
    • 1970-01-01
    相关资源
    最近更新 更多