WMI-uppgifter för tjänster hämtar information om tjänster, inklusive beroende eller tidigare tjänster. Andra exempel finns i TechNet ScriptCenter på https://www.microsoft.com/technet.
Skriptexemplen som visas i det här avsnittet hämtar endast data från den lokala datorn. Mer information om hur du använder skriptet för att hämta data från fjärrdatorer finns i Ansluta till WMI på en fjärrdator.
Följande procedur beskriver hur du kör ett skript.
Så här kör du ett skript
Kopiera koden och spara den i en fil med tillägget .vbs, till exempel filename.vbs. Kontrollera att textredigeraren inte lägger till ett .txt filnamnstillägg.
Öppna ett kommandotolksfönster och navigera till katalogen där du sparade filen.
Skriv cscript filename.vbs i kommandotolken.
Om du inte kan komma åt en händelselogg kontrollerar du om du kör från en upphöjd kommandotolk. Vissa händelseloggar, till exempel säkerhetshändelseloggen, kan skyddas av användaråtkomstkontroller (UAC).
Not
Som standard visar cscript utdata från ett skript i kommandotolkens fönster. Eftersom WMI-skript kan generera stora mängder utdata kanske du vill omdirigera utdata till en fil. Skriv cscript filename.vbs > outfile.txt i kommandotolken för att omdirigera utdata från filename.vbs skriptet till outfile.txt.
I följande tabell visas skriptexempel som kan användas för att hämta olika typer av data från den lokala datorn.
Hur gör jag...
WMI-klasser eller -metoder
... vilka tjänster som körs och vilka som inte är det?
Använd klassen Win32_Service för att kontrollera tillståndet för alla tjänster. Tillståndsegenskapen meddelar dig om en tjänst stoppas eller körs.
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
... stoppa Power Users från att starta vissa tjänster?
Använd Win32_Service-klassen och metoden ChangeStartMode för att ange egenskapen StartMode inaktiverad. Det går inte att starta inaktiverade tjänster, och som standard kan power-användare inte ändra startläget för en tjänst.
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
.. avgöra vilka tjänster jag kan stoppa?
Använd klassen Win32_Service och kontrollera värdet för egenskapen 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
... hitta de tjänster som måste köras innan jag kan starta DHCP-tjänsten?
Fråga efter ASSOCIATORS OFWin32_Service-klassen med namnet "DHCP" som finns i klassen Win32_DependentService och har "Beroende" i egenskapen Roll.
Roll innebär rollen för DHCP-tjänsten: i det här fallet är den beroende av de andra tjänster som startas.
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
... hitta de tjänster som kräver att WMI-tjänsten (Winmgmt) körs innan de kan starta?
Fråga efter ASSOCIATORS OFWin32_Service-klassen med namnet "DHCP" som finns i klassen Win32_DependentService och har "Antecendent" i egenskapen Role.
Roll innebär rollen för rasmantjänsten: i det här fallet är det inte nödvändigt att startas innan de beroende tjänsterna.
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