As tarefas WMI para serviços obtêm informações sobre serviços, incluindo serviços dependentes ou antecedentes. Para obter outros exemplos, consulte o TechNet ScriptCenter em https://www.microsoft.com/technet.
Os exemplos de script mostrados neste tópico obtêm dados somente do computador local. Para obter mais informações sobre como usar o script para obter dados de computadores remotos, consulte Conectando-se ao WMI em um computador remoto.
O procedimento a seguir descreve como executar um script.
Executar um script
Copie o código e salve-o em um arquivo com uma extensão .vbs, como filename.vbs. Verifique se o editor de texto não adiciona uma extensão .txt ao arquivo.
Abra uma janela do prompt de comando e navegue até o diretório onde você salvou o arquivo.
Digite cscript filename.vbs no prompt de comando.
Se você não puder acessar um log de eventos, verifique se está em execução em um prompt de comando com privilégios elevados. Alguns Logs de Eventos, como o Log de Eventos de Segurança, podem ser protegidos pelos Controles de Acesso do Usuário (UAC).
Nota
Por padrão, o cscript exibe a saída de um script na janela do prompt de comando. Como os scripts WMI podem produzir grandes quantidades de saída, convém redirecionar a saída para um arquivo. Digite cscript filename.vbs > outfile.txt no prompt de comando para redirecionar a saída do script filename.vbs para outfile.txt.
A tabela a seguir lista exemplos de script que podem ser usados para obter vários tipos de dados do computador local.
Como faço para...
Classes ou métodos WMI
... determinar quais serviços estão em execução e quais não estão?
Use a classe Win32_Service para verificar o estado de todos os serviços. A propriedade state permite que você saiba se um serviço está parado ou em execução.
VB
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
... Impedir que os Usuários do Power iniciem determinados serviços?
Use a classe Win32_Service e o métodoChangeStartMode para definir a propriedade StartMode como Desabilitada. Os serviços desabilitados não podem ser iniciados e, por padrão, os Usuários do Power não podem alterar o modo de início de um serviço.
VB
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
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
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
.. determinar quais serviços posso parar?
Use a classe Win32_Service e verifique o valor da propriedade AcceptStop.
VB
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
... encontrar os serviços que devem estar em execução antes de iniciar o serviço DHCP?
Consulte ASSOCIADORES DE a classe Win32_Service chamada "DHCP" que estão na classe Win32_DependentService e têm "Dependente" na propriedade Role.
função significa a função do serviço DHCP: nesse caso, ela depende dos outros serviços que estão sendo iniciados.
VB
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
PowerShell
$query = "Associators Of {Win32_Service.Name='dhcp'} Where AssocClass=Win32_DependentService Role=Dependent"
Get-WmiObject -Query $query -Namespace "root\cimv2" | format-list DisplayName
... encontrar os serviços que exigem que o serviço WMI (Winmgmt) esteja em execução antes que eles possam iniciar?
Consulte ASSOCIADORES DE a classe Win32_Service denominada "DHCP" que estão na classe Win32_DependentService e têm "Antecendent" na propriedade de Função.
Função significa a função do serviço rasman: nesse caso, é anterior a ser iniciado antes dos serviços dependentes.
VB
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
PowerShell
$query = "Associators of {Win32_Service.Name='winmgmt'} Where AssocClass=Win32_DependentService Role=Antecedent"
Get-WmiObject -Query $query -Namespace "root\cimv2" | format-list Name, DisplayName