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.

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

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.

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

En utilisant une requête WQL:

Vous pouvez également utiliser une requête WQL / CQL pour interroger et filtrer des instances.

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

Interrogation d'objets dans un espace de noms différent:

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

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.

3.0

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 .

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*"

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 .

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

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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow