2011-01-19 7 views
3

"SQL"という文字列を含むすべてのインストール済みサービスの名前(名前のみ)を表示しようとしています。文字列パターンに一致するすべてのサービス名を表示

Get-WmiObject Win32_Service 

これは、すべてのサービスを表示しますが、たとえば、私は、だから私はこれを試してみてください

  • にSQLAgent $ SQL2008_R2
  • SQLBrowser
  • SQLWRITER

を見たいですリストとして。

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

なぜ私はこの名前の代わりに出力を得ていますか? 名前だけを入力するにはどうすればよいですか?

Get-WmiObject Win32_Service | Select-Object -ExpandProperty Name | 
Select-String -pattern 'SQL' 

編集を:

答えて

5

それを達成するための最も簡単な方法は、あなたがそれを変更することができます

Get-WMIObject Win32_Service -Filter "Name LIKE '%SQL%'" | 
Select -ExpandProperty Name 

はケースで、あなただけ、ここにあなたのコードと一緒に行きたい道-Filterパラメータをされて使用されます:LIKE演算子は、一致するパターンをサポートするために、いくつかのメタ文字を取ります。

[] - 範囲の一致。たとえば、Name LIKE '[a-f]%'は、aからfまでの任意の文字で始まるすべてのサービスをリストします。

^ - ではありません。たとえば、Name LIKE '[^a-f]%'は、aからfまでの文字で始まらないサービスをリストします。

_ - 1文字に一致します。たとえば、Name LIKE 'S_L%'は、Sで始まり、任意の文字が続くサービスをリストします。

+0

ありがとうございました。私の次の学習課題の違いを理解することである 『』を選択し、オブジェクトを-ExpandProperty名前をと "select-object {$ _。Name}" –

11

あなたは、Get-Serviceを使用する代わりに-WmiObjectコマンドを取得し、このようにそれを行うことができます」

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