PowerShell
WMI en CIM
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.
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.
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.
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:
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.
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
.
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
.
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.
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"