使用用户输入通配符查找已停止服务的列表

时间:2014-04-21 21:39:20

标签: powershell wildcard

我试图创建一个电源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的新手,所以我有点卡住了。任何帮助将不胜感激。

2 个答案:

答案 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