Get-WmiObject es el cmdlet más importante para tareas generales de administración de sistemas. Toda la configuración fundamental de los subsistemas se expone mediante WMI. Además, WMI trata los datos como objetos incluidos en conjuntos de uno o más elementos. Dado que Windows PowerShell también trabaja con objetos y cuenta con una canalización que permite tratar uno o varios objetos de la misma manera, el acceso general a WMI permite realizar algunas tareas avanzadas con muy poco esfuerzo.

En los ejemplos siguientes se muestra la forma de recopilar información específica usando Get-WmiObject respecto a un equipo arbitrario. El valor especificado del parámetro ComputerName es un punto (.), que representa el equipo local. Puede especificar un nombre o una dirección IP correspondiente a cualquier equipo al que pueda tener acceso mediante WMI. Para recuperar información acerca del equipo local, puede omitir -ComputerName.

Mostrar la lista de configuraciones de escritorio

Empezamos con un comando que recopila información acerca de los escritorios del equipo local.

Get-WmiObject -Class Win32_Desktop -ComputerName .

Este comando devuelve información de todos los escritorios, estén o no en uso.

Nota:

La información que devuelven algunas clases de WMI puede ser muy detallada e incluye a menudo metadatos acerca de dicha clase. Como la mayoría de estas propiedades de metadatos tienen nombres que comienzan por un carácter de doble subrayado, puede filtrar las propiedades usando Select-Object. Puede especificar únicamente las propiedades que comiencen por caracteres alfabéticos utilizando [a-z]* como valor de Property. Por ejemplo:

Get-WmiObject -Class Win32_Desktop -ComputerName . | Select-Object -Property [a-z]*

Para filtrar los metadatos, utilice un operador de canalización (|) para enviar los resultados del comando Get-WmiObject a Select-Object -Property [a-z]*.

Mostrar información del BIOS

La clase Win32_BIOS de WMI devuelve información bastante compacta y completa acerca del BIOS del sistema en el equipo local:

Get-WmiObject -Class Win32_BIOS -ComputerName .

Mostrar información de procesadores

Puede recuperar información general de procesadores usando la clase Win32_Processor de WMI, aunque es probable que desee filtrar la información:

Get-WmiObject -Class Win32_Processor -ComputerName . | Select-Object -Property [a-z]*

Para obtener una cadena de descripción general de la familia de procesadores, basta con que se devuelva la propiedad Win32_ComputerSystem SystemType:

PS> Get-WmiObject -Class Win32_ComputerSystem -ComputerName . | Select-Object -Property SystemType
SystemType
----------
X86-based PC

Mostrar el fabricante y el modelo del equipo

La información del modelo del equipo también está disponible en Win32_ComputerSystem. No es necesario filtrar el resultado estándar mostrado para proporcionar los datos de OEM:

PS> Get-WmiObject -Class Win32_ComputerSystem
Domain              : WORKGROUP
Manufacturer        : Compaq Presario 06
Model               : DA243A-ABA 6415cl NA910
Name                : MyPC
PrimaryOwnerName    : Jane Doe
TotalPhysicalMemory : 804765696

El resultado de comandos como éste, que devuelven información directamente de algunos componentes de hardware, será tan válido como los datos de los que usted disponga. Algunos fabricantes de hardware pueden no haber configurado correctamente algún tipo de información y, por tanto, es posible que esta información no esté disponible.

Mostrar las revisiones instaladas

Puede mostrar todas las revisiones instaladas usando Win32_QuickFixEngineering:

Get-WmiObject -Class Win32_QuickFixEngineering -ComputerName .

Esta clase devuelve una lista de revisiones similar a la siguiente:

Description         : Update for Windows XP (KB910437)
FixComments         : Update
HotFixID            : KB910437
Install Date        :
InstalledBy         : Administrator
InstalledOn         : 12/16/2005
Name                :
ServicePackInEffect : SP3
Status              :

Para que el resultado sea más conciso, quizá desee excluir algunas propiedades. Aunque puede utilizar el parámetro Get-WmiObject Property para seleccionar solamente el HotFixID, esta acción devuelve realmente más información, ya que todos los metadatos se muestran de forma predeterminada:

PS> Get-WmiObject -Class Win32_QuickFixEngineering -ComputerName . -Property HotFixId
HotFixID         : KB910437
__GENUS          : 2
__CLASS          : Win32_QuickFixEngineering
__SUPERCLASS     :
__DYNASTY        :
__RELPATH        :
__PROPERTY_COUNT : 1
__DERIVATION     : {}
__SERVER         :
__NAMESPACE      :
__PATH           :

Se devuelven los datos adicionales porque el parámetro Property de Get-WmiObject limita las propiedades devueltas de instancias de clases de WMI, no el objeto devuelto a Windows PowerShell. Para reducir el resultado, utilice Select-Object:

PS> Get-WmiObject -Class Win32_QuickFixEngineering -ComputerName . -Property Hot
FixId | Select-Object -Property HotFixId
HotFixId
--------
KB910437

Mostrar información de versión del sistema operativo

Las propiedades de la clase Win32_OperatingSystem incluyen información sobre la versión del sistema operativo y los Service Pack instalados. Puede seleccionar explícitamente solo estas propiedades para obtener un resumen de la información de versión de Win32_OperatingSystem:

Get-WmiObject -Class Win32_OperatingSystem -ComputerName . | Select-Object -Property BuildNumber,BuildType,OSType,ServicePackMajorVersion,ServicePackMinorVersion

También puede utilizar caracteres comodín con el parámetro Select-Object Property. Como todas las propiedades que comienzan por Build o ServicePack son importantes en este caso, hemos reducido el resultado de la siguiente manera:

PS> Get-WmiObject -Class Win32_OperatingSystem -ComputerName . | Select-Object -Property Build*,OSType,ServicePack*

BuildNumber             : 2600
BuildType               : Uniprocessor Free
OSType                  : 18
ServicePackMajorVersion : 2
ServicePackMinorVersion : 0

Mostrar los usuarios y propietarios locales

La información general sobre los usuarios locales (número de usuarios con licencia, número actual de usuarios y nombre del propietario) está disponible mediante una selección de propiedades de Win32_OperatingSystem. Puede seleccionar explícitamente las propiedades para que se muestre lo siguiente:

Get-WmiObject -Class Win32_OperatingSystem -ComputerName . | Select-Object -Property NumberOfLicensedUsers,NumberOfUsers,RegisteredUser

Una versión más concisa con caracteres comodín es la siguiente:

Get-WmiObject -Class Win32_OperatingSystem -ComputerName . | Select-Object -Property *user*

Obtener el espacio en disco disponible

Para ver el espacio en disco y el espacio disponible para unidades locales, puede utilizar la clase Win32_LogicalDisk de WMI. Necesita ver únicamente las instancias con el valor 3 para DriveType, que es el valor que WMI usa para los discos duros fijos.

Get-WmiObject -Class Win32_LogicalDisk -Filter "DriveType=3" -ComputerName .

DeviceID     : C:
DriveType    : 3
ProviderName :
FreeSpace    : 65541357568
Size         : 203912880128
VolumeName   : Local Disk

DeviceID     : Q:
DriveType    : 3
ProviderName :
FreeSpace    : 44298250240
Size         : 122934034432
VolumeName   : New Volume

PS> Get-WmiObject -Class Win32_LogicalDisk -Filter "DriveType=3" -ComputerName . | Measure-Object -Property FreeSpace,Size -Sum

Get-WmiObject -Class Win32_LogicalDisk -Filter "DriveType=3" -ComputerName . | Measure-Object -Property FreeSpace,Size -Sum | Select-Object -Property Property,Sum

Obtener información de sesiones iniciadas

Puede obtener información general acerca de sesiones iniciadas que estén asociadas a usuarios mediante la clase Win32_LogonSession de WMI:

Get-WmiObject -Class Win32_LogonSession -ComputerName .

Obtener el usuario que ha iniciado una sesión en un equipo

Puede mostrar el usuario que ha iniciado una sesión en un determinado equipo con Win32_ComputerSystem. Este comando devuelve únicamente el usuario que ha iniciado una sesión en el escritorio del sistema:

Get-WmiObject -Class Win32_ComputerSystem -Property UserName -ComputerName .

Obtener la hora local de un equipo

Puede recuperar la hora local actual que se muestra en un equipo específico usando la clase Win32_LocalTime de WMI. Como esta clase muestra todos los metadatos de forma predeterminada, es posible que desee filtrarlos usando Select-Object:

PS> Get-WmiObject -Class Win32_LocalTime -ComputerName . | Select-Object -Property [a-z]*


Day          : 15
DayOfWeek    : 4
Hour         : 12
Milliseconds :
Minute       : 11
Month        : 6
Quarter      : 2
Second       : 52
WeekInMonth  : 3
Year         : 2006

Mostrar el estado de un servicio

Para ver el estado de todos los servicios en un equipo específico, puede utilizar localmente el cmdlet Get-Service como se ha mencionado anteriormente. Para sistemas remotos, puede usar la clase Win32_Service de WMI. Si utiliza también Select-Object para filtrar los resultados a Status, Name y DisplayName, el formato de los resultados será prácticamente igual que el de Get-Service:

Get-WmiObject -Class Win32_Service -ComputerName . | Select-Object -Property Status,Name,DisplayName

Para que los nombres de servicio que sean muy largos se muestren completos, quizá desee usar Format-Table con los parámetros AutoSize y Wrap, con lo que se optimiza el ancho de columna y se permite ajustar los nombres largos en lugar de truncarlos:

Get-WmiObject -Class Win32_Service -ComputerName . | Format-Table -Property Status,Name,DisplayName -AutoSize -Wrap




Tabla de contenido