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

本文深入探讨了 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 中设置错误动作偏好
如果我们需要脚本以特定方式运行(例如抑制错误),我们可能会考虑设置一些偏好变量。偏好变量作为 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
命令。该命令负责在控制台上显示一条消息。
输出:
我们可以为 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 中不同错误处理方面的探索,很明显,这种脚本语言的强大之处在于其灵活性和深度。从 -ErrorAction
参数的简单性到 Try-Catch
语句提供的细致控制,PowerShell 为在各种场景中管理错误提供了丰富的工具包。
理解这些工具并知道何时应用它们对于编写健壮、具有弹性的脚本至关重要。我们已经探讨了在上下文中抑制错误如何既是福音又是风险,并看到了如何捕获错误以供后续分析。
到现在为止,您应该对这些方法有全面的理解,并能够在您的脚本编写工作中灵活运用它们。
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn