Powershell Get-Service (停止) 但不显示状态“等待 <x> 服务停止...”

Powershell Get-Service (Stop) but NOT display status "waiting for <x> service to stop..."

提问人:Kazic 提问时间:1/14/2023 最后编辑:Mathias R. JessenKazic 更新时间:1/14/2023 访问量:165

问:

基本上,我对所采取的行动没有问题。我的问题是关于操作“等待...”的状态输出。消息。有没有办法抑制该消息?

例:

PS C:\Users\a.real.person.maybe> Get-Service *fewserviceswithmatchingprefixes* | Where-Object {$_.Name -notmatch 'somethinghere' -and $_.Name -ne 'alsosomethinghere' -and $_.Name -ne 'somethinghereprobably'} | Stop-Service
WARNING: Waiting for service 'thoseservicesabove' to stop...
WARNING: Waiting for service 'anotheroneofthoseservicesabove' to stop...

enter image description here

PowerShell 抑制消息

评论

4赞 Mathias R. Jessen 1/14/2023
Stop-Service -WarningAction SilentlyContinue

答:

0赞 Kazic 1/14/2023 #1

@mathias评论中一针见血!

一堆东西 |Stop-Service -WarningAction 静默继续

1赞 Mathias R. Jessen 1/14/2023 #2

您可以将调用站点的变量值设置为 或 (两者都将禁止使用和呈现警告消息):$WarningActionPreferenceIgnoreSilentlyContinue

$WarningActionPreference = 'SilentlyContinue'
Get-Service *fewserviceswithmatchingprefixes* | Where-Object {$_.Name -notmatch 'somethinghere' -and $_.Name -ne 'alsosomethinghere' -and $_.Name -ne 'somethinghereprobably'} | Stop-Service

或者,您可以在调用 时显式使用 common 参数(它只会影响 ):-WarningActionStop-ServiceStop-Service

... | Stop-Service -WarningAction SilentlyContinue
0赞 mklement0 1/14/2023 #3

为了补充 Mathias 的有用回答

您也可以使用重定向(即 3>$null 来静音警告3>

... | Stop-Service 3>$null

PowerShell 的输出流是有编号的(与外界通信时,流(成功)和(错误)对应系统级 stdout 和 stderr 流),指的是警告流,可以作为目标,重定向运算符;重定向以有效地丢弃目标流的输出(如果有)。123>$null

这适用于任何输出流(隐式相同,即以成功的输出流为目标),PowerShell 甚至提供重定向 *> 来重定向所有流。
文件名或路径为目标,而不是(悄悄地)将流输出保存到纯文本文件,其格式与您在终端中看到的格式相同,只是省略了特定于流的前缀,例如“WARNING:”。
>1>$null

与使用通用 -WarningAction 参数相比,使用 3> 具有一个优点

  • 只有 cmdlet高级函数和脚本支持 ,而 3>$null 也适用于使用 Write-Warning 的简单函数和脚本-WarningAction

    • 相比之下,$WarningPreference首选项变量所有 PowerShell 命令同样有效。

    • 但是,首选项变量,特别是 $ErrorActionPreference 首选项变量不适用于外部程序:流和更高级别不适用于外部程序,并且默认情况下,外部程序的 stderr 输出(明智地)被视为错误输出(尽管此类输出可以作为流编号);若要使外部程序的 stderr 输出静音,必须使用 2>$null32

    • 顺便说一句:其他与警告相关的功能也仅受 cmdlet 和高级函数/脚本支持,即通过通用 -WarningVariable 参数变量中收集警告的功能;此功能与重定向最接近的是将警告写入到的文件为目标(这需要在事后显示该文件的内容才能同时打印警告)。3>

  • 虽然在技术上是不同的,但以流为目标的重定向(如 like)的行为应与等效参数相同,并且 - 除了 / - 同样适用于 。3>-WarningAction SilentlyContinue2>-ErrorAction-*Action Ignore

    • -ErrorAction Ignore-like / - 抑制错误流输出,但与后者不同的是,它还会阻止发生的(非终止)错误记录在自动$Error变量中,该变量是迄今为止发生的错误的会话范围的集合。2>$null-ErrorAction SilentlyContinue
    • 在极少数边缘情况下(由于我不知道的原因),可能无法记录,但仍然如此 - 有关示例,请参阅此答案-ErrorAction SilentlyContinue$Error2>$null