Compartir a través de


Obtención de objetos de WMI con Get-CimInstance

Este ejemplo solo se aplica a las plataformas Windows.

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 los cmdlets de CIM para acceder a objetos WMI y, después, cómo usar objetos WMI para realizar acciones específicas.

Enumeración de 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

El listado de clases devuelto por los equipos remotos puede variar debido al sistema operativo específico que ejecuta el equipo y a las extensiones WMI concretas que agregan 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.

Visualización de los 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    22621       USER1          00330-80000-00000-AA175 10.0.22621

Aunque vamos a mostrar 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   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 disponible, 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 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 : 41787920
TotalVisibleMemorySize : 16622096
FreePhysicalMemory     : 9365296
FreeSpaceInPagingFiles : 25042952
FreeVirtualMemory      : 33013484
Name                   : Microsoft Windows 11 Pro|C:\Windows|\Device\Harddisk0\Partition2