Obtener objetos de WMI (Get-WmiObject)

Instrumental de administración de Windows (WMI) es una tecnología básica para la administración de sistemas Windows, ya que expone una amplia variedad de información de manera uniforme. Debido a todo lo que se puede hacer con WMI, el cmdlet de Windows PowerShell para el acceso a objetos de WMI, Get-WmiObject, es uno de los más útiles para el trabajo real. Vamos a explicar cómo se puede utilizar Get-WmiObject para tener acceso a objetos de WMI y, a continuación, cómo se pueden usar los objetos de WMI para realizar tareas específicas.

Enumerar las clases de WMI

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

Este problema se resuelve con Get-WmiObject, que permite obtener información de WMI. Para obtener una lista de las clases de WMI disponibles en el equipo local, escriba:

PS> Get-WmiObject -List


__SecurityRelatedClass                  __NTLMUser9X
__PARAMETERS                            __SystemSecurity
__NotifyStatus                          __ExtendedStatus
Win32_PrivilegesStatus                  Win32_TSNetworkAdapterSettingError
Win32_TSRemoteControlSettingError       Win32_TSEnvironmentSettingError
...

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:

PS> Get-WmiObject -List -ComputerName 192.168.1.29


__SystemClass                           __NAMESPACE
__Provider                              __Win32Provider
__ProviderRegistration                  __ObjectProviderRegistration
...

La lista de clases devuelta por los equipos remotos puede variar en función del sistema operativo que se ejecute en el equipo y de las extensiones de WMI agregadas por las aplicaciones instaladas.

Nota:

Cuando se utiliza Get-WmiObject para conectar con un equipo remoto, en dicho equipo debe estar ejecutándose WMI y, con la configuración predeterminada, la cuenta que se esté utilizando debe pertenecer al grupo de administradores locales del citado equipo. No es necesario que el sistema remoto tenga instalado Windows PowerShell. Esto permite administrar sistemas operativos que no ejecutan Windows PowerShell, pero que disponen de WMI.

Incluso puede especificar el parámetro ComputerName al conectarse al sistema local. Como nombre de equipo puede usar el nombre del equipo local, su dirección IP (o la dirección de bucle invertido 127.0.0.1) o el punto ('.') de WMI. Si ejecuta Windows PowerShell en un equipo denominado Admin01 con dirección IP 192.168.1.90, los comandos siguientes devolverán la lista de clases de WMI del equipo:

Get-WmiObject -List
Get-WmiObject -List -ComputerName .
Get-WmiObject -List -ComputerName Admin01
Get-WmiObject -List -ComputerName 192.168.1.90
Get-WmiObject -List -ComputerName 127.0.0.1
Get-WmiObject -List -ComputerName localhost

De forma predeterminada, Get-WmiObject usa el espacio de nombres root/cimv2. Si desea especificar otro espacio de nombres de WMI, utilice el parámetro Namespace y especifique la ruta de acceso al espacio de nombres correspondiente:

PS> Get-WmiObject -List -ComputerName 192.168.1.29 -Namespace root


__SystemClass                           __NAMESPACE
__Provider                              __Win32Provider
...

Obtener información detallada sobre las clases de WMI

Si ya sabe el nombre de una clase de WMI, puede utilizarlo para obtener información de forma inmediata. Por ejemplo, una de las clases de WMI que se usan habitualmente para recuperar información acerca de un equipo es Win32_OperatingSystem.

PS> Get-WmiObject -Class Win32_OperatingSystem -Namespace root/cimv2 -ComputerName .


SystemDirectory : C:\WINDOWS\system32
Organization    : Global Network Solutions
BuildNumber     : 2600
RegisteredUser  : Oliver W. Jones
SerialNumber    : 12345-678-9012345-67890
Version         : 5.1.2600

Aunque se muestran todos los parámetros, el comando se puede expresar de manera más concisa. El parámetro ComputerName no es necesario al conectarse al sistema local. Lo mostramos como demostración del caso más general y para recordarle que existe. El valor predeterminado de Namespace, que también se puede omitir, es root/cimv2. Por último, la mayoría de los cmdlets permiten omitir el nombre de parámetros comunes. En el caso de Get-WmiObject, si no se especifica ningún nombre para el primer parámetro, Windows PowerShell lo procesará como el parámetro Class. Esto significa que el comando anterior se podría haber escrito así:

Get-WmiObject 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 de WMI están disponibles automáticamente como otras propiedades de un objeto:

PS> Get-WmiObject -Class Win32_OperatingSystem -Namespace root/cimv2 -ComputerName . | Get-Member -MemberType Property


   TypeName: System.Management.ManagementObject#root\cimv2\Win32_OperatingSyste
m

Name                                      MemberType Definition
----                                      ---------- ----------
__CLASS                                   Property   System.String __CLASS {...
...
BootDevice                                Property   System.String BootDevic...
BuildNumber                               Property   System.String BuildNumb...
...

Mostrar propiedades no predeterminadas con los cmdlets Format

Si desea ver información contenida en la clase Win32_OperatingSystem que no se muestra de forma predeterminada, puede usar los cmdlets Format. Por ejemplo, si desea que se muestren los datos de memoria disponible, escriba:

PS> Get-WmiObject -Class Win32_OperatingSystem -Namespace root/cimv2 -ComputerName . | Format-Table -Property TotalVirtualMemorySize,TotalVisibleMemorySize,FreePhysicalMemory,FreeVirtualMemory,FreeSpaceInPagingFiles

TotalVirtualMemorySize TotalVisibleMem FreePhysicalMem FreeVirtualMemo FreeSpaceInPagi
                              ory              ry         ngFiles
--------------- --------------- --------------- --------------- ---------------
        2097024          785904          305808         2056724         1558232
Nota:

Se pueden utilizar caracteres comodín con nombres de propiedades en Format-Table, de modo que el último elemento de la canalización se puede reducir a Format-Table -Property TotalV*,Free*.

Puede facilitar la lectura de los datos de memoria si les aplica formato de lista mediante el siguiente comando:

PS> Get-WmiObject -Class Win32_OperatingSystem -Namespace root/cimv2 -ComputerName . | Format-List TotalVirtualMemorySize,TotalVisibleMemorySize,FreePhysicalMemory,FreeVirtualMemory,FreeSpaceInPagingFiles


TotalVirtualMemorySize : 2097024
TotalVisibleMemorySize : 785904
FreePhysicalMemory     : 301876
FreeVirtualMemory      : 2056724
FreeSpaceInPagingFiles : 1556644




Tabla de contenido