Usando objetos WMI

Al momento de aprovechar los beneficios de Powershell usando objectos WMI, estamos interactuando directamente con WMI namespaces y clases. Ahora bien, que es WMI:

Windows Management Instrumentation (WMI) es la fuente principal para administrar los datos y la funcionalidad en equipos locales y remotos que ejecutan los sistemas operativos Microsoft Windows.

Este fragmento de definicón extraído de la TechNet, nos deja ver que WMI es bastante importante y que es necesario tenerlo en cuenta a la hora de administrar nuestros sistemas. Se pueden obtener los datos de administración de WMI directamente a través de scripts y aplicaciones o a través de herramientas de administración, como pueden ser System Center Configuration Manager o System Center Operations Manager.

Como se comentaba en el párrafo anterior, por medio de scripts es posible administrar nuestro sitema operativo y acá les comparto algunos ejemplos de uso:

El primer Cmdlet que vamos a ver es Get-WmiObject que permite recolectar la información necesaria dentro de un namespace y clase, previamente definido. Por defecto, Get-WmiObject usa el namespace root\cimv2, siendo éste el sistema de nombres por defecto utilizado en Windows.

Entonces, vamos a obtener información sobre nuestro equipo:

Get-WmiObject -Namespace root\cimv2 -Class win32_computersystem

Usando objectos WMI

Otro ejemplo es usar WMI para obtener información sobre los procesos:

Get-WmiObject -Class Win32_Process

Existe otro Cmdlet similar llamado Get-CimInstance aunque su mayor diferencia es la posibilidad de trabajar remotamente usando una sesión CIM. Ejecutando el Cmdlet con la clase que usamos en el primer ejempl, vamos a obtener los mismos datos, pero de la siguiente manera:

Get-CimInstance

Podemos obtener una lista con todas las clases ejecutando:

Get-WmiObject -list

O podemos filtrar en caso de necesitar algo más específico, como podría llegar a ser “ Disk” , para obtener información de los discos:

Get-WmiObject -list | where {$_.Name -like "*Disk*"}

Donde aparece la clase Win32_LogicalDisk, que podemos usarla para obtener el espacio de nuestro disco duro (en mi caso sólo C: ya que no tengo particiones):

Get-WMIObject -Class Win32_LogicalDisk | Where-Object {$_.DriveType -eq 3}

Win32_LogicalDisk

Existen muchas clases para investigar, lo mejor va a ser que busquen directamente para obtener la información que necesiten.

Saludos,

Comments