Compartir a través de


Obtención de objetos de WMI con Get-CimInstance

Este ejemplo solo se aplica a las plataformas Windows.

Instrumental de administración de Windows (WMI) es una tecnología básica para la administración del sistema de Windows, ya que expone una amplia gama de información de forma uniforme. Debido a todo lo que WMI hace posible, el cmdlet de PowerShell para acceder a objetos WMI, Get-CimInstance, es uno de los más útiles para realizar trabajo efectivo. Vamos a analizar cómo usar los cmdlets CIM para acceder a objetos WMI y cómo usar objetos WMI para hacer cosas específicas.

Enumeración de clases WMI

El primer problema al que se enfrentan la mayoría de los usuarios de WMI es intentar averiguar lo que se puede hacer con WMI. Las clases WMI describen los recursos que se pueden administrar. Hay cientos de clases WMI, algunas de las cuales contienen docenas de propiedades.

Get-CimClass soluciona este problema haciendo que WMI sea reconocible. Puede obtener una lista de las clases WMI disponibles en el equipo local escribiendo:

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, especificando un nombre de equipo o una dirección IP:

Get-CimClass -Namespace root/CIMV2 -ComputerName 192.168.1.29

La lista de clases devuelta por equipos remotos puede variar debido al sistema operativo específico que ejecuta el equipo y las aplicaciones instaladas agregan las extensiones WMI concretas.

Nota:

Al usar cmdlets CIM para conectarse a un equipo remoto, el equipo remoto debe ejecutar WMI y la cuenta que usa debe estar en el grupo local Administradores en el equipo remoto. El sistema remoto no necesita tener Instalado PowerShell. Esto le permite administrar sistemas operativos que no ejecutan PowerShell, pero que tienen WMI disponible.

Visualización de los detalles de clases WMI

Si ya conoce el nombre de una clase WMI, puede usarlo para obtener información inmediatamente. Por ejemplo, una de las clases WMI que se usan 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    22621       USER1          00330-80000-00000-AA175 10.0.22621

Aunque se muestran todos los parámetros, el comando se puede expresar de forma más concisa. El parámetro ComputerName no es necesario al conectarse al sistema local. Se lo mostramos para demostrar el caso más general y recordarle a usted sobre el parámetro. El Espacio de nombres se establece de manera predeterminada en root/CIMV2, y también se puede omitir. Por último, la mayoría de los cmdlets permiten 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 podría haberse emitido escribiendo:

Get-CimInstance Win32_OperatingSystem

La clase Win32_OperatingSystem tiene muchas más propiedades que 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   int16 CurrentTimeZone {get;}
DataExecutionPrevention_32BitApplications Property   bool DataExecutionPrevention_32BitApplications {get;}
DataExecutionPrevention_Available         Property   bool DataExecutionPrevention_Available {get;}
...

Visualización de propiedades no predeterminadas con los cmdlets Format

Si desea que la información contenida en la clase Win32_OperatingSystem que no se muestre de forma predeterminada, puede mostrarla mediante los cmdlets Format. Por ejemplo, si desea mostrar los datos de memoria disponibles, escriba:

Get-CimInstance -Class Win32_OperatingSystem | Format-Table -Property TotalVirtualMemorySize, TotalVisibleMemorySize, FreePhysicalMemory, FreeVirtualMemory, FreeSpaceInPagingFiles
TotalVirtualMemorySize TotalVisibleMemorySize FreePhysicalMemory FreeVirtualMemory FreeSpaceInPagingFiles
---------------------- ---------------------- ------------------ ----------------- ----------------------
              41787920               16622096            9537952          33071884               25056628

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 memoria pueden ser más legibles si lo da formato como una lista escribiendo:

Get-CimInstance -Class Win32_OperatingSystem | Format-List Total*Memory*, Free*
TotalVirtualMemorySize : 41787920
TotalVisibleMemorySize : 16622096
FreePhysicalMemory     : 9365296
FreeSpaceInPagingFiles : 25042952
FreeVirtualMemory      : 33013484
Name                   : Microsoft Windows 11 Pro|C:\Windows|\Device\Harddisk0\Partition2