web-dev-qa-db-ja.com

PowerShellですべてのサービスの「実行可能ファイルへのパス」を抽出する方法

Get-Service *sql* | sort DisplayName | out-file c:/servicelist.txt

ローカルマシンで実行されているすべてのサービスのリストを抽出する1行のPowerShellスクリプトがあり、「ステータス」、「名前」、「DisplayName」を表示するだけでなく、表示したい「実行可能ファイルへのパス」

43
Abilash A

WMIに頼る必要があると思います。

Get-WmiObject win32_service | ?{$_.Name -like '*sql*'} | select Name, DisplayName, State, PathName

Update選択したデータに対して何らかの操作を実行する場合は、計算されたプロパティを here のように使用できます。

たとえば、パス名の引用符で囲まれたテキストだけが必要な場合は、二重引用符で分割し、配列項目1を取得できます。

Get-WmiObject win32_service | ?{$_.Name -like '*sql*'} | select Name, DisplayName, @{Name="Path"; Expression={$_.PathName.split('"')[1]}} | Format-List
59
David Martin

より高速なWMIクエリのバリアント(SCCMクライアント)に対してこれを実行する必要がありました)

$SQLService=(get-wmiobject -Query 'Select * from win32_service where Name like "*SQL*"') | Select-object Name, DisplayName, State, Pathname

もう1つのトリックは、二重引用符なしのパス名が必要な場合に複数のSQL結果をトラップすることです(そのため、それらにアクションを実行できます)。

$SQLService | Select-Object Name, DisplayName, State, @{Name='PathName';Expression=$_.Pathname.replace('"','')}

-query(またはget-wmiobject)でget-ciminstanceを使用する大きな利点は、処理速度です。古い例では完全なリストを取得してからフィルタリングしますが、後者では非常に直接的なリストを取得します。

ちょうど2セントで追加:)

乾杯!ショーンザエナジャイズドテック

4
user7371585

正規表現パターンを使用して、結果をファイルにダンプすることもできます。

Get-WmiObject win32_service | ?{$_.Name -match '^sql'} | select Name, DisplayName, State, PathName >> C:\temp\sqlservices.txt
0
Aidar Gatin