Buscar..


Observaciones

CIM vs WMI

A partir de PowerShell 3.0, hay dos formas de trabajar con clases de administración en PowerShell, WMI y CIM. PowerShell 1.0 y 2.0 solo admitían el módulo WMI, que ahora está superpuesto al nuevo y mejorado módulo CIM. En una versión posterior de PowerShell, se eliminarán los cmdlets de WMI.

Comparación de módulos CIM y WMI:

Cmdlet CIM WMI-cmdlet Que hace
Get-CimInstance Get-WmiObject Obtiene objetos CIM / WMI para una clase
Invocar-Método Cim Invocar-WmiMethod Invoca un método de clase CIM / WMI
Registro-CimIndicationEvent Registrarse-WmiEvent Registra un evento para una clase CIM / WMI
Eliminar CimInstance Remove-WmiObject Eliminar objeto CIM / WMI
Set-CimInstance Set-WmiInstance Actualiza / Guarda objeto CIM / WMI
Get-CimAssociatedInstance N / A Obtener instancias asociadas (objeto / clases vinculadas)
Get-CimClass Get-WmiObject -List Lista de clases CIM / WMI
New-CimInstance N / A Crear nuevo objeto CIM
Get-CimSession N / A Listas de sesiones CIM
Nueva-cimSession N / A Crear nueva sesión CIM
New-CimSessionOption N / A Crea objeto con opciones de sesión; protocolo, codificación, deshabilitar el cifrado, etc. (para uso con New-CimSession )
Eliminar CimSession N / A Elimina / detiene sesión CIM

Recursos adicionales

¿Debo usar CIM o WMI con Windows PowerShell? @ ¡Oye, chico del scripting! Blog

Consulta de objetos

CIM / WMI se usa más comúnmente para consultar información o configuración en un dispositivo. En una clase que representa una configuración, proceso, usuario, etc. En PowerShell hay varias formas de acceder a estas clases e instancias, pero las formas más comunes son mediante el uso de los Get-CimInstance (CIM) o Get-WmiObject (WMI).

Listar todos los objetos para la clase CIM

Puedes enumerar todas las instancias de una clase.

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

Usando un filtro

Puede aplicar un filtro para obtener solo instancias específicas de una clase CIM / WMI. Los filtros se escriben utilizando WQL (predeterminado) o CQL (agregar -QueryDialect CQL ). -Filter utiliza la parte WHERE de una consulta WQL / CQL completa.

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

Usando una consulta WQL:

También puede usar una consulta WQL / CQL para consultar y filtrar instancias.

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

Consultando objetos en un espacio de nombres diferente:

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

Clases y espacios de nombres

Hay muchas clases disponibles en CIM y WMI que están separadas en múltiples espacios de nombres. El espacio de nombres más común (y predeterminado) en Windows es root/cimv2 . Para encontrar la clase correcta, puede ser útil hacer una lista de todos o buscar.

Listar clases disponibles

Puede enumerar todas las clases disponibles en el espacio de nombres predeterminado ( root/cimv2 ) en una computadora.

3.0

CIM:

Get-CimClass

WMI:

Get-WmiObject -List

Buscar una clase

Puedes buscar clases específicas usando comodines. Ej: encontrar clases que contengan el process palabra.

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

Listar clases en un espacio de nombres diferente

El espacio de nombres de la raíz se llama simplemente root . Puede listar las clases en otro espacio de nombres usando el parámetro -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"

Listar espacios de nombres disponibles

Para encontrar los espacios de nombres secundarios disponibles de la root (u otro espacio de nombres), consulte los objetos en la clase __NAMESPACE para ese espacio de nombres.

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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow