Windows Management Instrumentation (WMI) - Administración de Sistemas
📌 Introducción
- 🖥️ WMI = Subsistema de PowerShell para monitoreo y administración de sistemas.
- 📂 Incluido de forma nativa desde Windows 2000.
- 🎯 Objetivo: centralizar la gestión de dispositivos y aplicaciones en redes corporativas.
- 🔑 Permite interactuar con componentes locales y remotos.
🧩 Componentes de WMI
| Componente | Descripción |
|---|---|
| 🛠️ WMI service | Proceso que corre al iniciar el sistema. Intermediario entre providers, repositorio y apps. |
| 📦 Managed objects | Objetos físicos o lógicos administrables por WMI. |
| 👀 WMI providers | Monitorean eventos/datos de objetos específicos. |
| 🏷️ Clases | Definiciones usadas por los providers para pasar datos al servicio. |
| ⚡ Métodos | Asociados a clases. Ejecutan acciones (ej: iniciar/detener procesos en remoto). |
| 🗄️ WMI repository | Base de datos con la info estática de WMI. |
| 🔄 CIM Object Manager | Solicita datos a providers y los entrega a la app. |
| 📡 WMI API | Permite a las aplicaciones acceder a la infraestructura WMI. |
| 📬 WMI Consumer | Envía consultas vía el CIM Object Manager. |
🎯 Usos comunes de WMI
- 📊 Obtener estado de sistemas locales/remotos.
- 🔐 Configurar seguridad en máquinas y aplicaciones.
- 👥 Administrar permisos de usuarios y grupos.
- ⚙️ Modificar propiedades del sistema.
- 💻 Ejecutar código y programar procesos.
- 📝 Configurar logging y auditoría.
⌨️ Uso con WMIC (CLI)
- 📌 WMI puede usarse desde CMD con el comando
wmic. - 🔹
wmicabre un shell interactivo o ejecuta comandos directos. - 🔍 Alias + verbos/adverbios permiten consultar y filtrar información.
Ejemplo de ayuda:
wmic /?
Ejemplo: obtener info del SO

🔷 Uso con PowerShell
- 💡 PowerShell incluye módulos para trabajar con WMI.
📖 Obtener información del SO
Get-WmiObject -Class Win32_OperatingSystem |
select SystemDirectory,BuildNumber,SerialNumber,Version | ft
Salida:

⚡ Invocar métodos con WMI
Ejemplo: renombrar archivo
Invoke-WmiMethod -Path "CIM_DataFile.Name='C:\users\public\spns.csv'" `
-Name Rename -ArgumentList "C:\Users\Public\kerberoasted_users.csv"
Resultado esperado:
ReturnValue : 0 # Éxito