2011-01-19 65 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