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