Zoeken…


Opmerkingen

CIM versus WMI

Vanaf PowerShell 3.0 zijn er twee manieren om te werken met managementklassen in PowerShell, WMI en CIM. PowerShell 1.0 en 2.0 ondersteunden alleen de WMI-module die nu wordt vervangen door de nieuwe en verbeterde CIM-module. In een latere versie van PowerShell worden de WMI-cmdlets verwijderd.

Vergelijking van CIM- en WMI-modules:

CIM-cmdlet WMI-cmdlet Wat het doet
Get-CimInstance Get-WmiObject Hiermee worden CIM / WMI-objecten voor een klasse opgehaald
Invoke-CimMethod Invoke-WmiMethod Roept een methode van de CIM / WMI-klasse op
Register-CimIndicationEvent Register-WmiEvent Registreert gebeurtenis voor een CIM / WMI-klasse
Verwijderen-CimInstance Verwijderen-WmiObject Verwijder CIM / WMI-object
Set-CimInstance Set-WmiInstance Updates / bewaart CIM / WMI-object
Get-CimAssociatedInstance N / A Krijg bijbehorende instanties (gekoppeld object / klassen)
Get-CimClass Get-WmiObject -Lijst Lijst met CIM / WMI-klassen
Nieuw-CimInstance N / A Maak een nieuw CIM-object
Get-CimSession N / A Lijsten CIM-sessies
Nieuw-CimSession N / A Maak een nieuwe CIM-sessie
Nieuw-CimSessionOption N / A Maakt object met sessie-opties; protocol, codering, codering uitschakelen enz. (voor gebruik met New-CimSession )
Verwijderen-CimSession N / A Verwijdert / stopt CIM-sessie

Aanvullende bronnen

Moet ik CIM of WMI gebruiken met Windows PowerShell? @ Hé, Scripting Guy! blog

Objecten opvragen

CIM / WMI wordt meestal gebruikt om informatie of configuratie op een apparaat op te vragen. Een klasse die een configuratie, proces, gebruiker enz. Vertegenwoordigt. In PowerShell zijn er meerdere manieren om toegang te krijgen tot deze klassen en instanties, maar de meest gebruikelijke manieren zijn met behulp van de cmdlets Get-CimInstance (CIM) of Get-WmiObject (WMI).

Lijst alle objecten voor CIM-klasse

U kunt alle instanties van een klas weergeven.

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

Een filter gebruiken

U kunt een filter toepassen om alleen specifieke exemplaren van een CIM / WMI-klasse te krijgen. Filters worden geschreven met behulp van WQL (standaard) of CQL (voeg -QueryDialect CQL ). -Filter gebruikt het WHERE -deel van een volledige WQL / CQL-query.

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
....

Een WQL-query gebruiken:

Je kunt ook een WQL / CQL-query gebruiken om exemplaren op te vragen en te filteren.

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

Objecten in een andere naamruimte opvragen:

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 en naamruimten

Er zijn veel klassen beschikbaar in CIM en WMI die zijn onderverdeeld in meerdere naamruimten. De meest voorkomende (en standaard) naamruimte in Windows is root/cimv2 . Om de juiste klasse te vinden, kan het handig zijn om alles weer te geven of te zoeken.

Lijst beschikbare klassen

U kunt alle beschikbare klassen weergeven in de standaardnaamruimte ( root/cimv2 ) op een computer.

3.0

CIM:

Get-CimClass

WMI:

Get-WmiObject -List

Zoeken naar een klas

U kunt naar specifieke klassen zoeken met jokertekens. Ex: Vind klassen met het woord 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*"

Lijst klassen in een andere naamruimte

De root-naamruimte wordt eenvoudig root . U kunt klassen in een andere naamruimte weergeven met de 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"

Lijst met beschikbare naamruimten

Zoek naar de objecten in de __NAMESPACE -klasse voor die naamruimte om beschikbare onderliggende naamruimten van root (of een andere naamruimte) te vinden.

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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow