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