如何抑制 PowerShell 错误

  1. PowerShell 中的错误动作介绍
  2. 在 PowerShell 中使用 -ErrorAction 参数
  3. 在 PowerShell 中设置错误动作偏好
  4. 在 PowerShell 中使用 Try-Catch 语句参数
  5. 结论
如何抑制 PowerShell 错误

本文深入探讨了 PowerShell 错误处理的错综复杂的世界,探索了各种方法,例如 -ErrorAction 参数、设置错误动作偏好以及使用 Try-Catch 语句。这些方法各自服务于独特的目的,从在出现错误时默默继续执行脚本到实施复杂的错误处理机制。

这种详细的探索旨在为新手和资深脚本编写者提供知识,以便在 PowerShell 脚本中做出明智的错误处理决策,确保他们能够有效管理意外情况并维护脚本的完整性。

PowerShell 中的错误动作介绍

尽管压制 Windows PowerShell 错误非常容易,但这样做并不总是最佳选择(尽管它可能是)。如果我们不加思索地告诉 PowerShell 隐藏错误,它可能会导致我们的脚本表现不可预测。

压制错误消息还使故障排除和信息收集变得更加复杂。因此谨慎行事,谨慎使用本文中将看到的以下代码片段。

在 PowerShell 中使用 -ErrorAction 参数

PowerShell 中的 -ErrorAction 参数旨在指示 cmdlet 如何响应运行时错误。默认情况下,PowerShell 将错误显示在控制台上并继续执行。

然而,在某些情况下,您可能希望更改此行为——例如,suppress 错误消息或在发生错误时停止执行。在这里,-ErrorAction 变得至关重要。

命令:

Get-Service 'svc_not_existing' -ErrorAction SilentlyContinue
Write-Host "This line will execute regardless of the above command's result."

在我们的脚本中,我们尝试检索名为 'svc_not_existing' 的服务,一个假设不存在的服务。通过应用 -ErrorAction SilentlyContinue,我们指示 PowerShell 在未找到服务时持续执行,而不显示错误消息。

随后,我们的脚本无缝过渡到 Write-Host 命令。该命令将特定消息输出到控制台。

输出:

抑制 PowerShell 错误 - 输出 1

在 PowerShell 中设置错误动作偏好

如果我们需要脚本以特定方式运行(例如抑制错误),我们可能会考虑设置一些偏好变量。偏好变量作为 PowerShell 的配置设置。

我们可能会使用偏好变量来控制 PowerShell 保留的历史项目数量,或强制 PowerShell 在执行特定操作之前询问用户。

例如,您可以通过以下方式使用偏好变量将 -ErrorAction 参数设置为 SilentlyContinue,适用于整个会话。

命令:

$ErrorActionPreference = 'SilentlyContinue'
Get-Service 'nonexistent_service'
Write-Host "This message is displayed even if the previous command fails."

在我们的脚本中,我们首先将 $ErrorActionPreference 设置为 'SilentlyContinue'。此操作确保该设置适用于我们脚本中的所有后续命令。

因此,任何通常会出现的错误都被有效抑制。

接下来,我们使用 Get-Service cmdlet 尝试检索一个不存在的服务。在正常情况下,这会触发一个错误。然而,感谢我们之前的 $ErrorActionPreference 设置,任何本应生成的错误都保持不见且不引人注意。

在此之后,我们的脚本优雅地转向 Write-Host 命令。该命令负责在控制台上显示一条消息。

输出:

抑制 PowerShell 错误 - 输出 2

我们可以为 ErrorAction 切换参数指定许多其他错误动作。

  • Continue:PowerShell 将显示错误消息,但脚本将继续运行。
  • Ignore:PowerShell 不会产生任何错误消息,不会将任何错误输出写入主机,并继续执行。
  • Stop:PowerShell 将显示错误消息并停止运行脚本。
  • Inquire:PowerShell 显示错误消息,但如果用户希望继续,则先询问确认。
  • SilentlyContinue:如果代码不起作用或出现非终止错误,PowerShell 将默默继续代码执行。
  • Suspend:PowerShell 暂停脚本的工作流程。

在 PowerShell 中使用 Try-Catch 语句参数

Try-Catch 语句是 PowerShell 中管理和响应错误的一种强大工具,以一种受控和复杂的方式进行。它允许脚本编写者 try 一段代码块并 catch 任何在其执行期间发生的异常(错误)。

这种方法在您希望优雅地处理错误、在出现错误时执行特定操作或防止错误突然结束脚本时非常有用。

命令:

try {
    Get-Service 'nonexistent_service'
}
catch {
    Write-Host "An error occurred: $_"
}

在此脚本中,我们首先将可能出错的命令 Get-Service 'nonexistent_service' 封装在 try 块中。我们尝试检索一个可能不存在的服务,这通常会导致错误。

然而,不允许此错误终止脚本或显示未处理异常,而是我们捕获它。在 catch 块中,我们执行 Write-Host 命令以显示自定义错误消息,包括错误详细信息($_ 表示当前错误对象)。

输出:

抑制 PowerShell 错误 - 输出 3

结论

随着我们结束对 PowerShell 中不同错误处理方面的探索,很明显,这种脚本语言的强大之处在于其灵活性和深度。从 -ErrorAction 参数的简单性到 Try-Catch 语句提供的细致控制,PowerShell 为在各种场景中管理错误提供了丰富的工具包。

理解这些工具并知道何时应用它们对于编写健壮、具有弹性的脚本至关重要。我们已经探讨了在上下文中抑制错误如何既是福音又是风险,并看到了如何捕获错误以供后续分析。

到现在为止,您应该对这些方法有全面的理解,并能够在您的脚本编写工作中灵活运用它们。

Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn