我试图显示包含字符串" SQL"的所有已安装服务的名称(只是名称)。例如,我想看
所以我试试这个:
Get-WmiObject Win32_Service
这会显示所有服务,但会显示为列表。
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...)
这很好,但我只想看到这个名字。所以我输入:
Get-WmiObject Win32_Service | select-object Name
我得到了我的期望:
sppuinotfy
SQLAgent$SQL2008_RT
SQLBrowser
SQLWriter
SSDPSRV
(etc ..)
一切都很好。我采取下一步过滤名称只包括SQL相关的:
Get-WmiObject Win32_Service | select-object Name | select-string -pattern 'SQL'
现在它令人困惑。这是我的输出:
@{Name=BcmSqlStartupSvc}
@{Name=MSOLAP$SQL2008_R2}
@{Name=MSSQL$SQL2008_R2}
(etc ...)
为什么我得到这个输出,而不仅仅是名字? 我应该输入什么才能获得名称?
答案 0 :(得分:16)
您可以使用Get-Service而不是get-WMIObject,并按照“
”进行操作get-service sql* | select -expand name
答案 1 :(得分:11)
实现这一目标的最简单方法是使用-Filter
参数
Get-WMIObject Win32_Service -Filter "Name LIKE '%SQL%'" |
Select -ExpandProperty Name
如果您只想使用代码,可以通过以下方式修改代码:
Get-WmiObject Win32_Service | Select-Object -ExpandProperty Name |
Select-String -pattern 'SQL'
编辑:LIKE运算符采用一些元字符来支持匹配模式。
[]
- 用于范围匹配。例如,Name LIKE '[a-f]%'
将列出从a到f的任何字母开头的所有服务。
^
- 不是。例如,Name LIKE '[^a-f]%'
将列出不以a到f的任何字母开头的服务。
_
- 匹配一个字母。例如,Name LIKE 'S_L%'
将列出以S开头并后跟任何字母的服务。
答案 2 :(得分:7)
Get-Service | Where-Object {$_.Name -match "SQL"} |Select-Object Name