PowerShell
WMI et CIM
Recherche…
Remarques
CIM vs WMI
À partir de PowerShell 3.0, il existe deux manières de travailler avec des classes de gestion dans PowerShell, WMI et CIM. PowerShell 1.0 et 2.0 ne prenaient en charge que le module WMI, désormais remplacé par le nouveau module CIM amélioré. Dans une version ultérieure de PowerShell, les cmdlets WMI seront supprimées.
Comparaison des modules CIM et WMI:
CIM-cmdlet | WMI-cmdlet | Ce qu'il fait |
---|---|---|
Get-CimInstance | Get-WmiObject | Obtient des objets CIM / WMI pour une classe |
Invoke-CimMethod | Invoke-WmiMethod | Invoque une méthode de classe CIM / WMI |
Register-CimIndicationEvent | Register-WmiEvent | Enregistre l'événement pour une classe CIM / WMI |
Remove-CimInstance | Supprimer-WmiObject | Supprimer l'objet CIM / WMI |
Set-CimInstance | Set-WmiInstance | Met à jour / enregistre l'objet CIM / WMI |
Get-CimAssociatedInstance | N / A | Obtenir les instances associées (objet / classes liés) |
Get-CimClass | Get-WmiObject -List | Liste des classes CIM / WMI |
New-CimInstance | N / A | Créer un nouvel objet CIM |
Get-CimSession | N / A | Listes des sessions CIM |
New-CimSession | N / A | Créer une nouvelle session CIM |
New-CimSessionOption | N / A | Crée un objet avec des options de session; protocole, encodage, désactivation du cryptage, etc. (à utiliser avec New-CimSession ) |
Remove-CimSession | N / A | Supprime / Arrête la session CIM |
Ressources additionnelles
Dois-je utiliser CIM ou WMI avec Windows PowerShell? @ Hé, le scripteur! Blog
Interroger des objets
CIM / WMI est le plus souvent utilisé pour interroger des informations ou la configuration sur un périphérique. Une classe qui représente une configuration, un processus, un utilisateur, etc. Dans PowerShell, il existe plusieurs manières d'accéder à ces classes et instances, mais les méthodes les plus courantes sont les applets de commande Get-CimInstance
(CIM) ou Get-WmiObject
(WMI).
Liste tous les objets pour la classe CIM
Vous pouvez répertorier toutes les instances d'une classe.
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
En utilisant un filtre
Vous pouvez appliquer un filtre pour obtenir uniquement des instances spécifiques d'une classe CIM / WMI. Les filtres sont écrits en utilisant WQL
(par défaut) ou CQL (ajoutez -QueryDialect CQL
). -Filter
utilise la partie WHERE
d'une requête WQL / CQL complète.
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
....
En utilisant une requête WQL:
Vous pouvez également utiliser une requête WQL / CQL pour interroger et filtrer des instances.
CIM:
Get-CimInstance -Query "SELECT * FROM Win32_Process WHERE Name = 'powershell.exe'"
ProcessId Name HandleCount WorkingSetSize VirtualSize
--------- ---- ----------- -------------- -----------
4800 powershell.exe 673 88387584 2199696674816
Interrogation d'objets dans un espace de noms différent:
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
Classes et espaces de noms
Il existe de nombreuses classes disponibles dans CIM et WMI qui sont séparées en plusieurs espaces de noms. L'espace de noms le plus courant (et par défaut) dans Windows est root/cimv2
. Pour trouver la bonne classe, il peut être utile de lister tout ou chercher.
Liste des classes disponibles
Vous pouvez répertorier toutes les classes disponibles dans l'espace de noms par défaut ( root/cimv2
) sur un ordinateur.
CIM:
Get-CimClass
WMI:
Get-WmiObject -List
Rechercher un cours
Vous pouvez rechercher des classes spécifiques à l'aide de caractères génériques. Ex: Trouver des classes contenant le mot 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*"
Liste des classes dans un autre espace de noms
L'espace de noms racine est simplement appelé root
. Vous pouvez répertorier les classes dans un autre espace de noms à l'aide du paramètre -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 des espaces de noms disponibles
Pour rechercher des espaces de noms enfants disponibles de root
(ou d'un autre espace de noms), interrogez les objets de la classe __NAMESPACE
pour cet espace de noms.
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"