PowerShell
WMI und CIM
Suche…
Bemerkungen
CIM vs. WMI
Ab PowerShell 3.0 gibt es zwei Möglichkeiten, mit Verwaltungsklassen in PowerShell, WMI und CIM zu arbeiten. PowerShell 1.0 und 2.0 unterstützten nur das WMI-Modul, das nun durch das neue und verbesserte CIM-Modul ersetzt wird. In einer späteren Version von PowerShell werden die WMI-Cmdlets entfernt.
Vergleich von CIM- und WMI-Modulen:
CIM-Cmdlet | WMI-Cmdlet | Was es macht |
---|---|---|
Get-CimInstance | Get-WmiObject | Ruft CIM / WMI-Objekte für eine Klasse ab |
Aufruf-CimMethod | Aufruf-WmiMethod | Ruft eine CIM / WMI-Klassenmethode auf |
Register-CimIndicationEvent | Register-WmiEvent | Registriert ein Ereignis für eine CIM / WMI-Klasse |
Remove-CimInstance | Remove-WmiObject | CIM / WMI-Objekt entfernen |
Set-CimInstance | Set-WmiInstance | Updates / Speichert CIM / WMI-Objekt |
Get-CimAssociatedInstance | N / A | Verbundene Instanzen (verknüpfte Objekte / Klassen) abrufen |
Get-CimClass | Get-WmiObject -List | Listet CIM / WMI-Klassen auf |
New-CimInstance | N / A | Neues CIM-Objekt erstellen |
Get-CimSession | N / A | Listet CIM-Sitzungen auf |
New-CimSession | N / A | Neue CIM-Sitzung erstellen |
New-CimSessionOption | N / A | Erzeugt ein Objekt mit Sitzungsoptionen. Protokoll, Verschlüsselung, Deaktivierung der Verschlüsselung usw. (zur Verwendung mit New-CimSession ) |
Remove-CimSession | N / A | Entfernt / stoppt die CIM-Sitzung |
Zusätzliche Ressourcen
Sollte ich CIM oder WMI mit Windows PowerShell verwenden? @ Hey, Scripting Guy! Blog
Objekte abfragen
CIM / WMI wird am häufigsten verwendet, um Informationen oder Konfigurationen auf einem Gerät abzufragen. Es gibt eine Klasse, die eine Konfiguration, einen Prozess, einen Benutzer usw. darstellt. In PowerShell gibt es mehrere Möglichkeiten, auf diese Klassen und Instanzen zuzugreifen. Am häufigsten werden jedoch die Cmdlets Get-CimInstance
(CIM) oder Get-WmiObject
(WMI) verwendet.
Alle Objekte für die CIM-Klasse auflisten
Sie können alle Instanzen einer Klasse auflisten.
CIM:
> Get-CimInstance -ClassName Win32_Process
ProcessId Name HandleCount WorkingSetSize VirtualSize
--------- ---- ----------- -------------- -----------
0 System Idle Process 0 4096 65536
4 System 1459 32768 3563520
480 Secure System 0 3731456 0
484 smss.exe 52 372736 2199029891072
....
....
WMI:
Get-WmiObject -Class Win32_Process
Filter verwenden
Sie können einen Filter anwenden, um nur bestimmte Instanzen einer CIM / WMI-Klasse abzurufen. Filter werden mit WQL
(Standard) oder CQL (Hinzufügen -QueryDialect CQL
) geschrieben. -Filter
verwendet den WHERE
Teil einer vollständigen WQL / CQL-Abfrage.
CIM:
Get-CimInstance -ClassName Win32_Process -Filter "Name = 'powershell.exe'"
ProcessId Name HandleCount WorkingSetSize VirtualSize
--------- ---- ----------- -------------- -----------
4800 powershell.exe 676 88305664 2199697199104
WMI:
Get-WmiObject -Class Win32_Process -Filter "Name = 'powershell.exe'"
...
Caption : powershell.exe
CommandLine : "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"
CreationClassName : Win32_Process
CreationDate : 20160913184324.393887+120
CSCreationClassName : Win32_ComputerSystem
CSName : STACKOVERFLOW-PC
Description : powershell.exe
ExecutablePath : C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
ExecutionState :
Handle : 4800
HandleCount : 673
....
Verwendung einer WQL-Abfrage:
Sie können auch eine WQL / CQL-Abfrage verwenden, um Instanzen abzufragen und zu filtern.
CIM:
Get-CimInstance -Query "SELECT * FROM Win32_Process WHERE Name = 'powershell.exe'"
ProcessId Name HandleCount WorkingSetSize VirtualSize
--------- ---- ----------- -------------- -----------
4800 powershell.exe 673 88387584 2199696674816
Abfragen von Objekten in einem anderen Namespace:
CIM:
> Get-CimInstance -Namespace "root/SecurityCenter2" -ClassName AntiVirusProduct
displayName : Windows Defender
instanceGuid : {D68DDC3A-831F-4fae-9E44-DA132C1ACF46}
pathToSignedProductExe : %ProgramFiles%\Windows Defender\MSASCui.exe
pathToSignedReportingExe : %ProgramFiles%\Windows Defender\MsMpeng.exe
productState : 397568
timestamp : Fri, 09 Sep 2016 21:26:41 GMT
PSComputerName :
WMI:
> Get-WmiObject -Namespace "root\SecurityCenter2" -Class AntiVirusProduct
__GENUS : 2
__CLASS : AntiVirusProduct
__SUPERCLASS :
__DYNASTY : AntiVirusProduct
__RELPATH : AntiVirusProduct.instanceGuid="{D68DDC3A-831F-4fae-9E44-DA132C1ACF46}"
__PROPERTY_COUNT : 6
__DERIVATION : {}
__SERVER : STACKOVERFLOW-PC
__NAMESPACE : ROOT\SecurityCenter2
__PATH : \\STACKOVERFLOW-PC\ROOT\SecurityCenter2:AntiVirusProduct.instanceGuid="{D68DDC3A-831F-4fae-9E44-DA132C1ACF46}"
displayName : Windows Defender
instanceGuid : {D68DDC3A-831F-4fae-9E44-DA132C1ACF46}
pathToSignedProductExe : %ProgramFiles%\Windows Defender\MSASCui.exe
pathToSignedReportingExe : %ProgramFiles%\Windows Defender\MsMpeng.exe
productState : 397568
timestamp : Fri, 09 Sep 2016 21:26:41 GMT
PSComputerName : STACKOVERFLOW-PC
Klassen und Namespaces
In CIM und WMI stehen viele Klassen zur Verfügung, die in mehrere Namespaces unterteilt sind. Der gebräuchlichste (und Standard-) Namespace in Windows ist root/cimv2
. Um die Klasse zu finden, kann es nützlich sein, alle aufzulisten oder zu suchen.
Liste der verfügbaren Klassen
Sie können alle verfügbaren Klassen im Standardnamespace ( root/cimv2
) auf einem Computer root/cimv2
.
CIM:
Get-CimClass
WMI:
Get-WmiObject -List
Suche nach einer Klasse
Sie können mithilfe von Platzhaltern nach bestimmten Klassen suchen. Ex: Finden Klassen mit dem Wort process
.
CIM:
> Get-CimClass -ClassName "*Process*"
NameSpace: ROOT/CIMV2
CimClassName CimClassMethods CimClassProperties
------------ --------------- ------------------
Win32_ProcessTrace {} {SECURITY_DESCRIPTOR, TIME_CREATED, ParentProcessID, ProcessID...}
Win32_ProcessStartTrace {} {SECURITY_DESCRIPTOR, TIME_CREATED, ParentProcessID, ProcessID...}
Win32_ProcessStopTrace {} {SECURITY_DESCRIPTOR, TIME_CREATED, ParentProcessID, ProcessID...}
CIM_Process {} {Caption, Description, InstallDate, Name...}
Win32_Process {Create, Terminat... {Caption, Description, InstallDate, Name...}
CIM_Processor {SetPowerState, R... {Caption, Description, InstallDate, Name...}
Win32_Processor {SetPowerState, R... {Caption, Description, InstallDate, Name...}
...
WMI:
Get-WmiObject -List -Class "*Process*"
Listen Sie Klassen in einem anderen Namespace auf
Der Root-Namespace wird einfach als root
. Sie können Klassen in einem anderen Namespace mit dem Parameter -NameSpace
.
CIM:
> Get-CimClass -Namespace "root/SecurityCenter2"
NameSpace: ROOT/SecurityCenter2
CimClassName CimClassMethods CimClassProperties
------------ --------------- ------------------
....
AntiSpywareProduct {} {displayName, instanceGuid, pathToSignedProductExe, pathToSignedReportingE...
AntiVirusProduct {} {displayName, instanceGuid, pathToSignedProductExe, pathToSignedReportingE...
FirewallProduct {} {displayName, instanceGuid, pathToSignedProductExe, pathToSignedReportingE...
WMI:
Get-WmiObject -Class "__Namespace" -Namespace "root"
Liste der verfügbaren Namespaces
Um verfügbare __NAMESPACE
Namespaces von root
(oder einem anderen Namespace) zu finden, __NAMESPACE
Sie die Objekte in der __NAMESPACE
Klasse für diesen Namespace ab.
CIM:
> Get-CimInstance -Namespace "root" -ClassName "__Namespace"
Name PSComputerName
---- --------------
subscription
DEFAULT
CIMV2
msdtc
Cli
SECURITY
HyperVCluster
SecurityCenter2
RSOP
PEH
StandardCimv2
WMI
directory
Policy
virtualization
Interop
Hardware
ServiceModel
SecurityCenter
Microsoft
aspnet
Appv
WMI:
Get-WmiObject -List -Namespace "root"