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.

3,0

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.

3,0

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.

3,0

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:

3,0

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 .

3,0

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 .

3,0

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 .

3,0

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.

3,0

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"


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow