Freigeben über


WMI-Aufgaben: Dienste

WMI-Aufgaben für Dienste erhalten Informationen zu Diensten, einschließlich abhängiger oder vorerkennter Dienste. Weitere Beispiele finden Sie im TechNet ScriptCenter unter https://www.microsoft.com/technet.

Die in diesem Thema gezeigten Skriptbeispiele erhalten nur Daten vom lokalen Computer. Weitere Informationen zur Verwendung des Skripts zum Abrufen von Daten von Remotecomputern finden Sie unter Herstellen einer Verbindung mit WMI auf einem Remotecomputer.

Das folgende Verfahren beschreibt, wie ein Skript ausgeführt wird.

Ausführen eines Skripts

  1. Kopieren Sie den Code, und speichern Sie ihn in einer Datei mit der Erweiterung .vbs, z. B. filename.vbs. Stellen Sie sicher, dass der Text-Editor der Datei keine .txt Erweiterung hinzu fügt.
  2. Öffnen Sie ein Eingabeaufforderungsfenster, und navigieren Sie zu dem Verzeichnis, in dem Sie die Datei gespeichert haben.
  3. Geben Sie cscript filename.vbs an der Eingabeaufforderung ein.
  4. Wenn Sie nicht auf ein Ereignisprotokoll zugreifen können, überprüfen Sie, ob Sie über eine Eingabeaufforderung mit erhöhten Rechten ausgeführt werden. Einige Ereignisprotokolle, z. B. das Sicherheitsereignisprotokoll, können durch Benutzerzugriffssteuerelemente (UAC) geschützt werden.

Anmerkung

In cscript wird standardmäßig die Ausgabe eines Skripts im Eingabeaufforderungsfenster angezeigt. Da WMI-Skripts große Mengen an Ausgabe erzeugen können, möchten Sie die Ausgabe möglicherweise an eine Datei umleiten. Geben Sie cscript filename.vbs > outfile.txt an der Eingabeaufforderung ein, um die Ausgabe des filename.vbs Skripts an outfile.txtumzuleiten.

In der folgenden Tabelle sind Skriptbeispiele aufgeführt, die zum Abrufen verschiedener Datentypen vom lokalen Computer verwendet werden können.

Wie kann ich... WMI-Klassen oder -Methoden
... bestimmen, welche Dienste ausgeführt werden und welche nicht? Verwenden Sie die Win32_Service Klasse, um den Status aller Dienste zu überprüfen. Die Statuseigenschaft teilt Ihnen mit, ob ein Dienst beendet oder ausgeführt wird.
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
PowerShell
Get-WmiObject -Class win32_service -computer "." -Namespace "root\cimv2" | format-list Name, State
... Power Users am Starten bestimmter Dienste hindern?

Verwenden Sie die Win32_Service Klasse und die ChangeStartMode--Methode, um die StartMode-Eigenschaft auf "Disabled" festzulegen. Deaktivierte Dienste können nicht gestartet werden, und Standardmäßig können Power Users den Startmodus eines Diensts nicht ändern.

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
PowerShell
Get-WmiObject -Class win32_service -computer "." -Namespace "root\cimv2" | where {$_.startMode -eq "Manual"} | `
    foreach-object { [void]$_.changeStartMode('Disabled') }
... Dienste starten und beenden?

Verwenden Sie die Win32_Service Klasse und die StopService- und StartService- Methoden.

VB
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
PowerShell
Get-WmiObject -Class win32_service -computer "." -Namespace "root\cimv2" | where {$_.Name -eq "Alerter"} | `
    foreach-object { [void]$_.StartService() }
... Ändern von Dienstkonto-Kennwörtern mithilfe eines Skripts?

Verwenden Sie die klasse Win32_Service und die Change-Methode.

VB
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
.. bestimmen, welche Dienste ich beenden kann?

Verwenden Sie die Win32_Service Klasse, und überprüfen Sie den Wert der AcceptStop--Eigenschaft.

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
PowerShell
Get-WmiObject -Class win32_service -computer "." -Namespace "root\cimv2" | where {$_.AcceptStop -eq "True"} | `
     format-list DisplayName
... finden Sie die Dienste, die ausgeführt werden müssen, bevor ich den DHCP-Dienst starten kann?

Fragen Sie nach ASSOCIATORS OF der Win32_Service Klasse mit dem Namen "DHCP", die sich in der Win32_DependentService-Klasse befinden und in der eigenschaft Role "Dependent" enthalten sind. Rolle bedeutet die Rolle des DHCP-Diensts: In diesem Fall hängt sie von den anderen Diensten ab, die gestartet werden.

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
... suchen Sie die Dienste, für die der WMI-Dienst (Winmgmt) ausgeführt werden muss, bevor sie gestartet werden können?

Abfrage nach ASSOCIATORS OF der Win32_Service Klasse mit dem Namen "DHCP", die sich in der Win32_DependentService Klasse befinden und "Antecendent" in der Role-Eigenschaft aufweisen. Rolle bedeutet die Rolle des Rasman-Diensts: In diesem Fall muss er vor den abhängigen Diensten gestartet werden.

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

WMI-Aufgaben für Skripts und Anwendungen

WMI C++-Anwendungsbeispiele

TechNet ScriptCenter-

`