WMI-Tasks: Prozesse

WMI-Aufgaben für Prozesse erhalten Informationen wie das Konto, unter dem ein Prozess ausgeführt wird. Sie können Aktionen wie das Erstellen von Prozessen ausführen. 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 zum Abrufen von Daten aus Remotecomputern finden Sie unter Herstellen einer Verbindung mit WMI auf einem Remotecomputer.

Im folgenden Verfahren wird beschrieben, wie ein Skript ausgeführt wird.

So führen Sie ein Skript aus

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

Hinweis

Standardmäßig zeigt cscript die Ausgabe eines Skripts im Eingabeaufforderungsfenster an. Da WMI-Skripts große Ausgabemengen erzeugen können, möchten Sie die Ausgabe möglicherweise an eine Datei umleiten. Geben Sie cscript > filename.vbs outfile.txtan der Eingabeaufforderung ein, um die Ausgabe des filename.vbs-Skripts auf outfile.txtumzuleiten.

In der folgenden Tabelle sind Skriptbeispiele aufgeführt, die verwendet werden können, um verschiedene Datentypen vom lokalen Computer abzurufen.

Vorgehensweisen WMI-Klassen oder -Methoden
... Führen Sie eine Anwendung in einem ausgeblendeten Fenster aus? Rufen Sie die Anwendung aus einem Skript auf, das die Win32_Process und Win32_ProcessStartup Klassen verwendet.
VB
Const HIDDEN_WINDOW = 0
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set objStartup = objWMIService.Get("Win32_ProcessStartup")
Set objConfig = objStartup.SpawnInstance_
objConfig.ShowWindow = HIDDEN_WINDOW
Set objProcess = GetObject("winmgmts:root\cimv2:Win32_Process")
errReturn = objProcess.Create( "Notepad.exe", null, objConfig, intProcessID)
PowerShell
$startup=[wmiclass]"Win32_ProcessStartup"
$startup.Properties['ShowWindow'].value=$False
([wmiclass]"win32_Process").create('notepad.exe','C:\',$Startup)
... Bestimmen Sie, welche Skripts auf dem lokalen Computer ausgeführt werden?

Verwenden Sie die Win32_Process Klasse, und geben Sie alle Prozesse mit dem Namen Cscript.exe oder Wscript.exe zurück. Um die einzelnen Skripts zu bestimmen, die in diesen Prozessen ausgeführt werden, überprüfen Sie den Wert der CommandLine-Eigenschaft .

VB
strComputer = "." 
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Process" & _
           " WHERE Name = 'cscript.exe'" & " OR Name = 'wscript.exe'",,48) 
For Each objItem in colItems 
    Wscript.Echo "-------------------------------------------"
    Wscript.Echo "CommandLine: " & objItem.CommandLine
    Wscript.Echo "Name: " & objItem.Name
Next
PowerShell
$strComputer = "."
Get-WmiObject -Class "Win32_Process" -ComputerName "." | `
     where {($_.name -eq 'cscript.exe') -or ($_.name -eq 'wscript.exe') } | `
     Format-List -Property CommandLine, Name
... finden Sie den Kontonamen, unter dem ein Prozess ausgeführt wird?

Verwenden Sie die Win32_Process Klasse und die GetOwner-Methode .

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery ("Select * from Win32_Process")
For Each objProcess in colProcessList
    colProperties = objProcess.GetOwner( strNameOfUser,strUserDomain)
    Wscript.Echo "Process " & objProcess.Name & " is owned by " & strUserDomain & "\" & strNameOfUser & "."
Next
PowerShell
Get-WmiObject -class win32_process -ComputerName "." | ForEach-Object { $_.GetOwner() | Select -Property domain, user }
... Ändern der Priorität eines ausgeführten Prozesses?

Verwenden Sie die Win32_Process Klasse und die SetPriority-Methode .

VB
Const ABOVE_NORMAL = 32768
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcesses = objWMIService.ExecQuery ("Select * from Win32_Process Where Name = 'Notepad.exe'")
For Each objProcess in colProcesses
    objProcess.SetPriority(ABOVE_NORMAL) 
Next
PowerShell
$ABOVE_NORMAL = 32768
$strComputer = "."
$colProcesses = Get-WmiObject -Class Win32_Process -ComputerName $strComputer | Where-Object { $_.name -eq 'Notepad.exe' }
foreach ($objProcess in $colProcesses) { $objProcess.SetPriority($ABOVE_NORMAL) }
... Beenden eines Prozesses mithilfe eines Skripts?

Verwenden Sie die Win32_Process Klasse und die Terminate-Methode .

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery ("Select * from Win32_Process Where Name = 'Notepad.exe'")
For Each objProcess in colProcessList
    objProcess.Terminate()
Next
PowerShell
$strComputer = "."
$colProcesses = Get-WmiObject -Class Win32_Process -ComputerName $strComputer | Where-Object { $_.name -eq 'Notepad.exe' }
foreach ($objProcess in $colProcesses) { $objProcess.Terminate() }
... Bestimmen Sie, wie viel Prozessorzeit und Arbeitsspeicher jeder Prozess verwendet?

Verwenden Sie die Win32_Process Klasse und Eigenschaften wie KernelModeTime, WorkingSetSize, PageFileUsage und PageFaults.

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcesses = objWMIService.ExecQuery("Select * from Win32_Process")
For Each objProcess in colProcesses
    Wscript.Echo "Process: " & objProcess.Name
    sngProcessTime = (CSng(objProcess.KernelModeTime) + CSng(objProcess.UserModeTime)) / 10000000
    Wscript.Echo "Processor Time: " & sngProcessTime
    Wscript.Echo "Process ID: " & objProcess.ProcessID
    Wscript.Echo "Working Set Size: " & objProcess.WorkingSetSize
    Wscript.Echo "Page File Size: " & objProcess.PageFileUsage
    Wscript.Echo "Page Faults: " & objProcess.PageFaults
Next
PowerShell
$strComputer = "."
Get-WmiObject -Class "Win32s_Process" -ComputerName $strComputer | `
     Format-List -Property Name, KernelModeTime, UserModeTime, ProcessID, WorkingSetSize, PageFileUsage, PageFaults
... Teilen Sie mit, welche Anwendungen auf einem Remotecomputer ausgeführt werden?

Verwenden Sie die Win32_Process Klasse.

VB
strComputer = "atl-dc-01"
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery ("Select * from Win32_Process")
For Each objProcess in colProcessList
    Wscript.Echo "Process: " & objProcess.Name 
    Wscript.Echo "Process ID: " & objProcess.ProcessID 
    Wscript.Echo "Thread Count: " & objProcess.ThreadCount 
    Wscript.Echo "Page File Size: " & objProcess.PageFileUsage 
    Wscript.Echo "Page Faults: " & objProcess.PageFaults 
    Wscript.Echo "Working Set Size: " & objProcess.WorkingSetSize 
Next
PowerShell
strComputer = "atl-dc-01"
get-wmiObject -class Win32_Process -Namespace "root\cimv2" -ComputerName $strComputer | `
   Format-list Name, ProcessID, ThreadCount, PageFileUsage, PageFaults, WorkingSetSize

WMI-Aufgaben für Skripts und Anwendungen

WMI C++-Anwendungsbeispiele

TechNet ScriptCenter