throw 和 $pscmdlet.ThrowTerminateerror() 之间的区别?

2024-03-24

在 PowerShell 中,有什么区别throw $ErrorMsg and $PScmdlet.ThrowTerminatingError($ErrorMsg)?

它们是相同还是不同?如果它们不同,哪一个更可取?


Throw创建一个script-终止(运行空间终止)错误, 然而$PScmdlet.ThrowTerminatingError()创建一个陈述- 终止错误.

Note: 这些不是官方术语(该文档目前仅模糊地引用终止抽象中的错误,没有范围),但它们对于描述事实上的行为很有用。

简而言之:默认情况下,

  • a script- 终止错误终止整个运行空间默认情况下,即正在运行的脚本及其所有调用者,没有进一步执行的语句;换句话说:除非发现或抑制此类错误,否则fatal.

    • 他们可以caught with a try / catch https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_Try_Catch_Finally陈述(或者,不太常见的是,trap https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_Trap陈述)。

    • 他们可以压制通过设置$ErrorActionPreference偏好变量 https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_Preference_Variables#erroractionpreference to 'SilentlyContinue',或 - 仅在 PowerShell (Core) 7+ 中 - 至'Ignore'.

  • whereas a 陈述- 终止错误终止仅当前声明(函数调用$PScmdlet.ThrowTerminatingError()以及它所属的语句,通常是pipeline), with 执行继续next陈述默认情况下。

    • 它们可以像脚本终止错误一样被捕获或抑制,但请注意the common -ErrorAction 范围 https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_CommonParameters#-erroraction has no对他们的影响.

    • 相反,你可以promote它们会导致脚本终止错误$ErrorActionPreference = 'Stop',尽管文档声称$ErrorActionPreference仅适用于不终止的错误,第三种错误类型(其中-ErrorAction范围适用)。

有关更多信息,请参阅PowerShell 错误处理的(非官方)概述 https://github.com/PowerShell/PowerShell-Docs/issues/1583.

As for 指导何时使用哪种类型的错误:

  • 关于何时使用的指导很少Throw in the about_Throw https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_throw帮助主题;给出了一个示例用例,其中Throw用于在没有强制参数的情况下中止函数/脚本,作为 PowerShell 默认行为的替代方法提示 for it.

    • 请注意Throw,即抛出一个script-termination 错误将终止整个运行空间(正在运行的脚本及其任何调用者),除非被捕获。
  • The Cmdlet 错误报告 https://learn.microsoft.com/en-us/powershell/scripting/developer/cmdlet/cmdlet-error-reporting文章仅讨论cmdlet 内部 use关于何时报告陈述-终止(本文中仅称为“终止”)与不终止的 errors.

    • 文章的简要摘要可以在这个答案 https://stackoverflow.com/a/39949027/45375.

鉴于后者,你可以说高级功能- 因为它们就像 cmdlet - 应该at most report 陈述- 终止错误并且Throw (script-终止错误)应限于scripts,但请注意,这与使用相矛盾Throw强制执行强制参数。

Perhaps之间有问题的区别script-终止和陈述- 终止错误最终是无心的 and perhaps最初的意图是只拥有script-终止的,这可以解释为什么所有当前文档只谈论终止抽象错误,甚至没有提到区别。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

throw 和 $pscmdlet.ThrowTerminateerror() 之间的区别? 的相关文章

随机推荐

  • DDD:我真的需要加载聚合中的所有对象吗? (性能问题)

    在 DDD 中 存储库加载整个聚合 我们要么加载全部 要么不加载 这也意味着应该避免延迟加载 我关心的是性能方面的问题 如果这导致将数千个对象加载到内存中怎么办 例如 聚合Customer一万回来Orders 在这种情况下 是否意味着我需要
  • .vimrc:第 4 行:意外标记“(”附近的语法错误[重复]

    这个问题在这里已经有答案了 我正在尝试配置 Vim 但是当我尝试获取来源时 vimrc编辑文件后出现以下错误 源 vimrc bash let g plug shallow 0 未找到命令 bash Users stevenaguilar
  • Nodemon 错误:“已达到文件观察器数量的系统限制”

    我在学GraphQL https en wikipedia org wiki GraphQL我正在使用prisma binding用于 GraphQL 操作 我正面临着这个nodemon当我启动 Node js 服务器时出现错误 它给了我由
  • 如何“chartr”“-”(或转义范围)?

    在 R 中可以使用chartr将字符从一种更改为另一种 例如 chartr aor u Stackoverflow 1 Stuck ve fl w 模式可以是范围 例如chartr a hwo 0 9 Stackoverflow 但长度需要
  • 鸢尾花数据集未显示“物种”列

    我正在 Python 上使用 numpy 和 pandas 来学习如何处理数据帧 我正在 Collaboratory 上编码 并且已加载 Iris 数据集 但由于某种原因 我的数据框中没有 物种 列 也许我以错误的方式加载了它 我很乐意就此
  • 数据库MN关系

    我正在上数据库管理系统课程 绝对初学者 并且正在为一个非常简单的博客系统开发数据库 我有一个关于博客文章和帖子所属类别之间的 M N 关系的问题 一篇博客文章可以属于多个类别 该方案的部分如下所示 Scheme http creo prev
  • CocoaPods 和 GitHub 分叉

    这是我第一次 fork GitHub 项目 我对 CocoaPods 也不太熟悉 所以请耐心等待 基本上 我在 GitHub 上分叉了一个项目 在我的项目中使用了以下内容Podfile pod REActivityViewControlle
  • 找到所需类 javax.faces.FactoryFinder 的多个版本

    我开始使用 JSF2 0 我按照教程进行操作 没有任何问题 一切正常 我使用 Eclipse Helios 但我注意到一些我无法理解的事情 该教程说要为 JSF 2 添加 Project Facet 我没有做这样的事情 一切正常 因此 为了
  • 将元素上具有多个 Css 类的 HTML 文件导入 Excel 时出现问题

    如果为 HTML 元素指定了多个 CSS 类 Excel 看起来不会理解 HTML 属性 class 例如 如果 class A B 指向标签 TD Excel 将为该标签使用空样式 我有这些 html 代码
  • 如何在Python中读取键盘输入

    我在 Python 中遇到键盘输入问题 我尝试了 raw input 并且它只被调用一次 但我想在用户每次按任意键时读取键盘输入 我该怎么做 感谢您的回答 例如 你有这样的 Python 代码 file1 py bin python do
  • Likert 数据的 R 频率表

    我认为这是一项基本任务 但事实证明并非如此 我有一系列调查 需要将其转换为每个调查的频率表 例如 调查 1 包含 6 个问题 参与者有 5 个回答选项 对于每项调查 我需要生成一个表格 其中包含每个问题 在本示例中有 6 个 以及对每个问题
  • 在 JavaScript 中取消转义 HTML 实体?

    我有一些与 XML RPC 后端通信的 JavaScript 代码 XML RPC 返回以下形式的字符串 img src myimage jpg 但是 当我使用 JavaScript 将字符串插入 HTML 时 它们会按字面意思呈现 我没有
  • PHP 中的电子邮件跟踪技术

    我正在用 php 做一个新闻通讯管理 我需要跟踪打开我们新闻通讯的访问者 我已在新闻通讯中插入了跟踪图像 但这似乎不起作用 使用 Shift 邮件程序 可以选择将内嵌图像嵌入到时事通讯中 是否可以使用此内联图像进行跟踪 还有其他技术可以跟踪
  • @WebServlet 注释无法识别;初始化不运行

    我正在尝试学习注释 我目前有一个 Web 应用程序 当该应用程序在 Tomcat 中启动时 该应用程序会运行 init 以下代码有效 web xml
  • 为什么“分段错误”在 C 中仍然存在

    操作系统中的分段是一个与时间本身一样古老的概念 至少根据我的教授的说法 大多数现代操作系统已经放弃了分段的概念 现在主要依靠分页来实现内存保护 从而防止每个进程访问除自己的内存之外的任何其他内存 那么我们如何在 C 中仍然遇到 分段错误 在
  • Xcode Storyboard 在 UI 元素周围显示蓝色框架。我该如何关闭此功能?

    老实说 我不确定我在这里做了什么 我以前从未见过这个 Xcode 现在在我的 Storyboard 中的每个 UI 元素周围显示蓝色框架 这适用于其中的所有视图控制器 我该如何撤消或修复此问题 请看下面的截图 它们是 UI 元素的边界矩形
  • 当我使用 Finchley.M5 时,spring-cloud-starter-eureka 无法解析

    尝试使用 Spring Cloud Gateway 创建我自己的 api 网关 下面是我的 build gradle 文件 buildscript ext springBootVersion 1 5 9 RELEASE apply plug
  • MSVC 内联 ASM 到 GCC

    我正在尝试处理 MSVC 和 GCC 编译器 同时更新此代码库以在 GCC 上工作 但我不确定 GCC 内联 ASM 到底是如何工作的 现在我不太擅长将 ASM 翻译成 C 否则我只会使用 C 而不是 ASM SLONG Div16 sig
  • 用于填充电子表格列的一维数组

    我正在使用内置的组服务来提取用户名列表 function getUsersInGroup group var usersInGroup GroupsApp getGroupByEmail group getUsers return user
  • throw 和 $pscmdlet.ThrowTerminateerror() 之间的区别?

    在 PowerShell 中 有什么区别throw ErrorMsg and PScmdlet ThrowTerminatingError ErrorMsg 它们是相同还是不同 如果它们不同 哪一个更可取 Throw创建一个script 终