Obtener objetos de WMI (Get-CimInstance)

Obtener objetos de WMI (Get-CimInstance)

Windows Management Instrumentation (WMI) es una tecnología principal para la administración del sistema de Windows porque expone una amplia gama de información de manera uniforme. Debido a la medida en que WMI lo hace posible, el cmdlet de PowerShell para acceder a objetos WMI, Get-CimInstance es uno de los más útiles para realizar el trabajo real. Vamos a explicar cómo usar CimCmdlets para acceder a objetos WMI y, después, cómo usar objetos WMI para realizar acciones específicas.

Enumerar clases WMI

El primer problema que la mayoría de los usuarios de WMI experimentan es intentar averiguar qué se puede hacer con WMI. Las clases WMI describen los recursos que se pueden administrar. Existen cientos de clases WMI, algunas de los cuales contienen decenas de propiedades.

Get-CimClass hace que WMI se pueda detectar para abordar este problema. Para obtener una lista de las clases WMI disponibles en el equipo local, escriba:

Get-CimClass -Namespace root/CIMV2 |
  Where-Object CimClassName -like Win32* |
    Select-Object CimClassName
CimClassName
------------
Win32_DeviceChangeEvent
Win32_SystemConfigurationChangeEvent
Win32_VolumeChangeEvent
Win32_SystemTrace
Win32_ProcessTrace
Win32_ProcessStartTrace
Win32_ProcessStopTrace
Win32_ThreadTrace
Win32_ThreadStartTrace
Win32_ThreadStopTrace
...

Puede recuperar la misma información de un equipo remoto mediante el parámetro ComputerName. Para ello, especifique un nombre de equipo o una dirección IP:

Get-CimClass -Namespace root/CIMV2 -ComputerName 192.168.1.29

La lista de clases que devuelven los equipos remotos puede variar según el sistema operativo específico que el equipo está ejecutando y las extensiones WMI determinadas agregadas por las aplicaciones instaladas.

Nota

Al usar cmdlets de CIM para conectarse a un equipo remoto, este debe ejecutar WMI y la cuenta que está usando debe estar en el grupo de administradores local en el equipo remoto. El sistema remoto no necesita tener PowerShell instalado. Esto permite administrar los sistemas operativos que no ejecutan PowerShell, pero tienen WMI disponible.

Visualizar detalles de clases WMI

Si conoce el nombre de una clase WMI, puede usarlo para obtener información inmediatamente. Por ejemplo, una de las clases WMI que se usa habitualmente para recuperar información sobre un equipo es Win32_OperatingSystem.

Get-CimInstance -Class Win32_OperatingSystem
SystemDirectory     Organization BuildNumber RegisteredUser SerialNumber            Version
---------------     ------------ ----------- -------------- ------------            -------
C:\WINDOWS\system32 Microsoft    18362       USER1          00330-80000-00000-AA175 10.0.18362

Aunque vamos a presentar todos los parámetros, el comando se puede expresar de forma más concisa. El parámetro ComputerName no es necesario cuando se conecta al sistema local. Los presentamos para demostrar el caso más general y recordarle el parámetro. Namespace se establece de manera predeterminada en root/CIMV2 y también se puede omitir. Por último, la mayoría de los cmdlets permite omitir el nombre de los parámetros comunes. Con Get-CimInstance, si no se especifica ningún nombre para el primer parámetro, PowerShell lo trata como el parámetro Class. Esto significa que el último comando se podría haber emitido escribiendo:

Get-CimInstance Win32_OperatingSystem

La clase Win32_OperatingSystem tiene muchas más propiedades de las que se muestran aquí. Puede usar Get-Member para ver todas las propiedades. Las propiedades de una clase WMI están disponibles automáticamente como otras propiedades de objeto:

Get-CimInstance -Class Win32_OperatingSystem | Get-Member -MemberType Property
   TypeName: Microsoft.Management.Infrastructure.CimInstance#root/cimv2/Win32_OperatingSystem
Name                                      MemberType Definition
----                                      ---------- ----------
BootDevice                                Property   string BootDevice {get;}
BuildNumber                               Property   string BuildNumber {get;}
BuildType                                 Property   string BuildType {get;}
Caption                                   Property   string Caption {get;}
CodeSet                                   Property   string CodeSet {get;}
CountryCode                               Property   string CountryCode {get;}
CreationClassName                         Property   string CreationClassName {get;}
CSCreationClassName                       Property   string CSCreationClassName {get;}
CSDVersion                                Property   string CSDVersion {get;}
CSName                                    Property   string CSName {get;}
CurrentTimeZone                           Property   short CurrentTimeZone {get;}
DataExecutionPrevention_32BitApplications Property   bool DataExecutionPrevention_32BitApplications {get;}
DataExecutionPrevention_Available         Property   bool DataExecutionPrevention_Available {get;}
...

Visualizar propiedades no predeterminadas con cmdlets de formato

Si quiere ver la información incluida en la clase Win32_OperatingSystem que no aparece de forma predeterminada, puede mostrarla mediante los cmdlets Format. Por ejemplo, si desea mostrar los datos de memoria disponible, escriba:

Get-CimInstance -Class Win32_OperatingSystem |
  Format-Table -Property TotalVirtualMemorySize, TotalVisibleMemorySize,
    FreePhysicalMemory, FreeVirtualMemory, FreeSpaceInPagingFiles
TotalVirtualMemorySize TotalVisibleMemorySize FreePhysicalMemory FreeVirtualMemory FreeSpaceInPagingFiles
---------------------- ---------------------- ------------------ ----------------- ----------------------
              33449088               16671872            6451868          18424496               16285032

Nota

Los caracteres comodín funcionan con nombres de propiedad de Format-Table, por lo que el elemento final de la canalización se puede reducir a Format-Table -Property Total*Memory*, Free*.

Los datos de la memoria podrían ser más legibles si se formatean como una lista escribiendo:

Get-CimInstance -Class Win32_OperatingSystem | Format-List Total*Memory*, Free*
TotalVirtualMemorySize : 33449088
TotalVisibleMemorySize : 16671872
FreePhysicalMemory     : 6524456
FreeSpaceInPagingFiles : 16285808
FreeVirtualMemory      : 18393668
Name                   : Microsoft Windows 10 Pro|C:\WINDOWS|\Device\Harddisk0\Partition2