我试图创建一个电源shell脚本,在执行时会列出与特定用户输入通配符匹配的所有已停止的服务。我希望将通配符保存为字符串,然后在get服务中使用。这是我到目前为止所拥有的。
param([string] $SearchPrefix=$(throw "Please specify the search prefix:"))
Get-Service | Where-Object { $_.Status -eq "Stopped" } | Where-Object { $_.Name -eq $SearchPrefix} | foreach {$_.Status} | foreach {$_.Name}
我是学习Powershell的新手,所以我有点卡住了。任何帮助将不胜感激。
答案 0 :(得分:2)
将-eq
替换为-match
-eq
用于严格平等-match
用于模式。如果您要求提供前缀,请在开始时添加Circumflex Accent:$_.Name -match "^$SearchPrefix"
作为附注,你最近的两个foreach是无用的,将阻止输出AFAICS。
Get-Service | Where-Object { $_.Status -eq "Stopped" } | Where-Object { $_.Name -match $SearchPrefix}
将输出类似
的内容Status Name DisplayName
------ ---- -----------
Stopped WinHttpAutoProx... Service de découverte automatique d...
Stopped WinRM Gestion à distance de Windows (Gest...
如果您只想要两个第一列,请添加
| Format-Table -auto -property Status, Name
答案 1 :(得分:0)
假设您想要一个以wc开头的停止服务列表。
PS C:\> $SearchPrefix = "wc*"
PS C:\> Get-Service -Name $SearchPrefix | where{$_.status -eq 'Stopped'}
Status Name DisplayName
------ ---- -----------
Stopped wcncsvc Windows Connect Now - Config Registrar
Stopped WcsPlugInService Windows Color System