Powershell获取服务(停止),但不显示状态“等待< x>服务停止......”

xtupzzrd  于 2023-01-30  发布在  Shell
关注(0)|答案(3)|浏览(197)

基本上,我对正在执行的操作没有问题。我的问题是关于操作"waiting for ..."消息的状态输出。是否有办法抑制该消息?
示例:

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...

a64a0gku

a64a0gku1#

您可以在调用站点将$WarningActionPreference变量的值设置为IgnoreSilentlyContinue(这两个值都将禁止使用和呈现警告消息):

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

或者,您可以在调用Stop-Service时显式使用-WarningAction公共参数(它只会影响Stop-Service的特定调用):

... | Stop-Service -WarningAction SilentlyContinue
wsewodh2

wsewodh22#

@mathias在评论中一针见血!
一堆东西|停止-服务-警告操作静默继续

m1m5dgzv

m1m5dgzv3#

要补充Mathias' helpful answer
您可以或者使用3>重定向,即**3>$null来消除警告**:

... | Stop-Service 3>$null

PowerShell的output streams是有编号的(流1(成功),2(错误)对应系统级的stdout和stderr流,与外界通信时),3指的是 * 警告流 ,可以针对>redirection operator;重定向到$null有效地 * 丢弃 * 目标流的输出(如果有的话)。
这适用于任何输出流(>隐式地与1>相同,即以 * success * 输出流为目标),PowerShell甚至提供重定向
**>以重定向 * 所有 * 流。
将 * 文件名或路径 * 而不是$null(安静地)作为目标会将流输出保存到纯文本文件中,格式与您在终端中看到的格式相同,除了特定于流的前缀(如"WARNING:"的说明。
与使用公共-WarningAction参数相比,使用类似于
3>的参数有一个优点**:

  • 只有 * cmdlet * 和advanced函数和脚本支持-WarningAction,而**3>$null对使用Write-Warning**的 * 简单 * 函数和脚本也有效。
  • 相比之下,$WarningPreference * 首选项变量 * 对 * 所有 * PowerShell命令都同样有效。
  • 但是,首选项变量(特别是$ErrorActionPreference首选项变量)* 不 * 适用于 * 外部程序 :流3和更高的流 * 不适用于 * 外部程序,并且外部程序的 * stderr * 输出在默认情况下(明显地) 不 * 被认为是错误输出(尽管这样的输出可以作为流号2的目标);* * 要使外部程序的 * stderr * 输出静音,您 * 必须 * 使用2>$null**
  • 顺便说一句:也仅由cmdlet和高级函数/脚本支持的附加警告相关功能是经由公共-WarningVariable参数在 * 变量 * 中收集警告的能力;使用3>重定向最接近此功能的方法是将警告写入 * 文件 *(这需要在"打印"警告之后显示该文件的内容)。
  • 虽然 * 技术上不同 *,但像3>这样的流定向重定向应该与等效的-WarningAction SilentlyContinue参数 * 行为相同 *,并且-除了2>/-ErrorAction-同样适用于-*Action Ignore
  • -ErrorAction Ignore-类似于2>$null/-ErrorAction SilentlyContinue-抑制错误流 * 输出 ,但是-与后者不同- 另外地 * 防止发生的(非终止)错误 * 被记录在自动$Error变量 * 中,该变量是迄今为止已经发生的错误的会话范围的集合。
  • 在罕见的边缘情况下(原因我不知道),-ErrorAction SilentlyContinue可能会 * 失败 * 记录$Error,而2>$null仍然会-请参见this answer的示例。

相关问题