2011-01-19 44 views
3

我试图显示包含字符串“SQL”的所有已安装服务的名称(只是名称)。例如,我想看看显示匹配字符串模式的所有服务名称

  • 的SQLAgent $ SQL2008_R2
  • SQLBrowser
  • SQLWRITER

所以我试试这个:

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

这很好,但我只想看到这个名字。所以,I型:

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

为什么我得到这个输出,而不是只是名称? 我应该输入什么来获取名称?

回答

5

,以实现最简单的方法是使用-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开头并跟随任何字母的服务。

+0

谢谢。我的下一个学习任务是了解之间的区别‘选择对象-ExpandProperty名称’和“select-object {$ _。Name}” – 2011-01-19 03:43:36

11

可以使用Get-服务,而不是让-WmiObject可以和不喜欢这样”

get-service sql* | select -expand name 
4
Get-Service | Where-Object {$_.Name -match "SQL"} |Select-Object Name