服務的 WMI 工作會取得服務的相關信息,包括相依或前項服務。 如需其他範例,請參閱techNet ScriptCenter at https://www.microsoft.com/technet。
本主題中顯示的腳本範例只會從本機計算機取得數據。 如需如何使用文稿從遠端電腦取得資料的詳細資訊,請參閱 遠端電腦上連線到 WMI。
下列程式描述如何執行腳本。
執行腳本
- 複製程序代碼,並將它儲存在擴展名為 .vbs 的檔案中,例如 filename.vbs。 請確定文字編輯器不會將 .txt 擴展名新增至檔案。
- 開啟命令提示字元視窗,並流覽至您儲存盤案的目錄。
- 在命令提示字元中輸入 cscript filename.vbs。
- 如果您無法存取事件記錄檔,請檢查您是否正在從提高許可權的命令提示字元執行。 某些事件記錄檔,例如安全性事件記錄檔,可能會受到使用者訪問控制 (UAC) 的保護。
注意
根據預設,cscript 會在命令提示字元視窗中顯示文稿的輸出。 由於 WMI 命令稿可能會產生大量的輸出,因此您可能會想要將輸出重新導向至檔案。 在命令提示字元中輸入 cscript filename.vbs > outfile.txt,將 filename.v bs 的輸出重新導向至 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 類別中的 Win32_Service 類別,並在 Role 屬性中具有 “Dependent”。
角色 表示 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) 服務才能啟動的服務? |
查詢 ASSOCIATORS OFWin32_DependentService 類別中名為 “DHCP” 的 Win32_Service 類別,並在 Role 屬性中具有 “Antecendent”。
角色 表示 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
`