显示与字符串模式匹配的所有服务名称

And*_*erd 7 powershell windows-services

我正在尝试显示包含字符串"SQL"的所有已安装服务的名称(只是名称).例如,我想看

  • 的SQLAgent $ SQL2008_R2
  • SQLBrowser
  • SQLWRITER

所以我试试这个:

Get-WmiObject Win32_Service
Run Code Online (Sandbox Code Playgroud)

这将显示所有服务,但作为列表.

Exit Code : 0
Name      : ProtectedStorage
ProcessId : 664
StartMode : Manual
State     : Running
Status    : OK

Exit Code : 1077
Name      : QWAVE
ProcessId : 0
StartMode : Manual
State     : Stopped
Status    : OK
(etc...)
Run Code Online (Sandbox Code Playgroud)

这很好,但我只想看到这个名字.所以我键入:

Get-WmiObject Win32_Service | select-object Name
Run Code Online (Sandbox Code Playgroud)

我得到了我的期望:

sppuinotfy
SQLAgent$SQL2008_RT
SQLBrowser
SQLWriter
SSDPSRV
(etc ..)
Run Code Online (Sandbox Code Playgroud)

一切都很好.我采取下一步过滤名称只包括SQL相关的名称:

Get-WmiObject Win32_Service | select-object Name | select-string -pattern 'SQL'
Run Code Online (Sandbox Code Playgroud)

现在它令人困惑.这是我的输出:

@{Name=BcmSqlStartupSvc}
@{Name=MSOLAP$SQL2008_R2}
@{Name=MSSQL$SQL2008_R2}
(etc ...)
Run Code Online (Sandbox Code Playgroud)

为什么我得到这个输出,而不仅仅是名字?我应该输入什么才能获得名字?

mjo*_*nor 18

您可以使用Get-Service而不是get-WMIObject来执行此操作"

get-service sql* | select -expand name
Run Code Online (Sandbox Code Playgroud)


rav*_*nth 12

实现这一目标的最简单方法是使用-FilterParameter

Get-WMIObject Win32_Service -Filter "Name LIKE '%SQL%'" | 
Select -ExpandProperty Name
Run Code Online (Sandbox Code Playgroud)

如果您只想使用代码,可以通过以下方式修改代码:

Get-WmiObject Win32_Service | Select-Object -ExpandProperty Name | 
Select-String -pattern 'SQL'
Run Code Online (Sandbox Code Playgroud)

编辑:LIKE运算符采用一些元字符来支持匹配模式.

[] - 用于范围匹配.例如,Name LIKE '[a-f]%'将列出以a到f的任何字母开头的所有服务.

^ - 不是.例如,Name LIKE '[^a-f]%'将列出不以a到f的任何字母开头的服务.

_ - 匹配一个字母.例如,Name LIKE 'S_L%'将列出以S开头并后跟任何字母的服务.


Zer*_*ool 8

Get-Service | Where-Object {$_.Name -match "SQL"} |Select-Object Name
Run Code Online (Sandbox Code Playgroud)