サービスの WMI タスクは、依存サービスや継続元サービスを含むサービスに関する情報を取得します。 その他の例については、https://www.microsoft.com/technetの TechNet ScriptCenter を参照してください。
このトピックに示すスクリプトの例では、ローカル コンピューターからのみデータを取得します。 スクリプトを使用してリモート コンピューターからデータを取得する方法の詳細については、「リモート コンピューター上の WMI への接続」を参照してください。
次の手順では、スクリプトを実行する方法について説明します。
スクリプト を実行するには
- コードをコピーし、拡張子が .vbs のファイル (filename.vbs など)保存します。 テキスト エディターでファイルに .txt 拡張子が追加されていないことを確認します。
- コマンド プロンプト ウィンドウを開き、ファイルを保存したディレクトリに移動します。
- コマンド プロンプト cscript filename.vbs を入力します。
- イベント ログにアクセスできない場合は、管理者特権でのコマンド プロンプトから実行しているかどうかを確認します。 セキュリティ イベント ログなどの一部のイベント ログは、ユーザー アクセス制御 (UAC) によって保護される場合があります。
手記
既定では、cscript はコマンド プロンプト ウィンドウにスクリプトの出力を表示します。 WMI スクリプトでは大量の出力が生成される可能性があるため、出力をファイルにリダイレクトすることが必要になる場合があります。 コマンド プロンプト cscript filename.vbs > outfile.txt を入力して、filename.vbs スクリプトの出力を outfile.txtにリダイレクトします。
次の表に、ローカル コンピューターからさまざまな種類のデータを取得するために使用できるスクリプトの例を示します。
| ...実行されているサービスと実行されていないサービスを特定する場合は、次の操作を行います。 |
Win32_Service クラスを使用して、すべてのサービスの状態を確認します。 state プロパティを使用すると、サービスが停止しているか実行中であるかを確認できます。
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Service",,48)
For Each objItem in colItems
Wscript.Echo "Service Name: " & objItem.Name & VBNewLine & "State: " & objItem.State
Next
|
Get-WmiObject -Class win32_service -computer "." -Namespace "root\cimv2" | format-list Name, State
|
|
| ...Power Users による特定のサービスの開始を停止しますか? |
Win32_Service クラスと ChangeStartMode メソッドを使用して、StartMode プロパティを Disabled に設定します。 無効になっているサービスは開始できません。また、既定では、Power Users はサービスの開始モードを変更できません。
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colServiceList = objWMIService.ExecQuery ("Select * from Win32_Service where StartMode = 'Manual'")
For Each objService in colServiceList
errReturnCode = objService.Change( , , , , "Disabled")
WScript.Echo "Changed manual service to disabled: " & objService.Name
Next
|
Get-WmiObject -Class win32_service -computer "." -Namespace "root\cimv2" | where {$_.startMode -eq "Manual"} | `
foreach-object { [void]$_.changeStartMode('Disabled') }
|
|
| ...サービスを開始および停止しますか? |
Win32_Service クラスと StopService および StartServiceメソッド使用します。
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colListOfServices = objWMIService.ExecQuery ("Select * from Win32_Service Where Name ='Alerter'")
For Each objService in colListOfServices
objService.StartService()
Wscript.Echo "Started Alerter service"
Next
|
Get-WmiObject -Class win32_service -computer "." -Namespace "root\cimv2" | where {$_.Name -eq "Alerter"} | `
foreach-object { [void]$_.StartService() }
|
|
| ...スクリプトを使用してサービス アカウントのパスワードを変更しますか? |
Win32_Service クラスと Change メソッドを使用します。
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colServiceList = objWMIService.ExecQuery ("Select * from Win32_Service")
For Each objservice in colServiceList
If objService.StartName = ".\netsvc" Then
errReturn = objService.Change( , , , , , , , "password")
End If
Next
|
|
| ..停止できるサービスを決定する |
Win32_Service クラスを使用し、AcceptStop プロパティの値を確認します。
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colServices = objWMIService.ExecQuery ("Select * from Win32_Service Where AcceptStop = True")
For Each objService in colServices
Wscript.Echo objService.DisplayName
Next
|
Get-WmiObject -Class win32_service -computer "." -Namespace "root\cimv2" | where {$_.AcceptStop -eq "True"} | `
format-list DisplayName
|
|
| ...DHCP サービスを開始する前に実行する必要があるサービスを見つけますか? |
の ASSOCIATORS OF、Win32_DependentService クラス内にあり、Role プロパティに "Dependent" を持つ "DHCP" という名前の Win32_Service クラスを照会します。
ロール は、DHCP サービスの役割を意味します。この場合は、開始されている他のサービスに依存します。
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colServiceList = objWMIService.ExecQuery("Associators Of " _
& "{Win32_Service.Name='dhcp'} Where " _
& "AssocClass=Win32_DependentService " _
& "Role=Dependent")
For Each objService in colServiceList
Wscript.Echo objService.DisplayName
Next
|
$query = "Associators Of {Win32_Service.Name='dhcp'} Where AssocClass=Win32_DependentService Role=Dependent"
Get-WmiObject -Query $query -Namespace "root\cimv2" | format-list DisplayName
|
|
| ...開始する前に WMI サービス (Winmgmt) サービスを実行する必要があるサービスを見つけますか? |
WIN32_DEPENDENTSERVICE クラス内にあり、Role プロパティに "Antecendent" を持つ "DHCP" という名前の Win32_Service クラスを の ASSOCIATORS OF を照会します。 ロール は、rasman サービスの役割を意味します。この場合、依存サービスの前に開始する必要があります。
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\ & strComputer & "\root\cimv2")
Set colServiceList = _
objWMIService.ExecQuery("Associators of " _
& "{Win32_Service.Name='winmgmt'} Where " _
& "AssocClass=Win32_DependentService " _
& "Role=Antecedent" )
For Each objService in colServiceList
Wscript.Echo "Name: " & objService.Name & VBTab & "Display Name: " & objService.DisplayName
Next
|
$query = "Associators of {Win32_Service.Name='winmgmt'} Where AssocClass=Win32_DependentService Role=Antecedent"
Get-WmiObject -Query $query -Namespace "root\cimv2" | format-list Name, DisplayName
|
|
-
スクリプトとアプリケーションの WMI タスクの
-
WMI C++ アプリケーションの例
-
TechNet ScriptCenter
`