服务的 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.vbs 脚本的输出重定向到 outfile.txt。
下表列出了可用于从本地计算机获取各种类型的数据的脚本示例。
...确定哪些服务正在运行,哪些服务不运行? |
使用 Win32_Service 类检查所有服务的状态。 状态属性可让你知道服务是否已停止或运行。
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 类中的名为“DHCP”的 Win32_Service 类,并在 Role 属性中具有“依赖”。
角色 表示 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 属性中具有“先行者”。
角色 意味着 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
`