¿WMIC, qué es eso?, hola a todos, sean bienvenidos a esta nueva publicación donde daremos respuesta a esta duda. WMIC (Windows Management Instrumentation Command-line), es una utilidad de comandos presentada con Windows XP (fuente Computer Hoy).
Esta herramienta permite a administradores, programadores y usuarios en general consultar y gestionar distintos componentes de hardware y software mediante la consola de comandos. Esto es estupendo pues sin necesidad de apis especiales podríamos desde la consola de comandos lanzar una consola oculta, obtener los resultados y procesarlos en nuestra aplicación. Ejemplo:
Imports System.Diagnostics
Imports System.IO
Module Module1
Sub Main()
Console.WriteLine("Consultando detalles de la red activa mediante WMIC...")
' Configurar el proceso para ejecutar WMIC
Dim psi As New ProcessStartInfo()
psi.FileName = "wmic.exe"
' Comando WMIC para traer tarjetas activas (NetConnectionStatus=2)
' Recupera: Nombre de la conexión, Nombre del hardware, Dirección MAC y Velocidad
psi.Arguments = "path Win32_NetworkAdapter where ""NetConnectionStatus=2"" get NetConnectionID, Name, MACAddress, Speed"
psi.RedirectStandardOutput = True
psi.UseShellExecute = False
psi.CreateNoWindow = True
Try
Using p As Process = Process.Start(psi)
Using reader As StreamReader = p.StandardOutput
Dim resultado As String = reader.ReadToEnd()
If String.IsNullOrWhiteSpace(resultado) OrElse resultado.Contains("No se encontraron instancias") Then
Console.WriteLine("No se detectó ninguna interfaz de red activa.")
Else
Console.WriteLine("Resultados de WMIC:")
Console.WriteLine(resultado)
End If
End Using
End Using
Catch ex As Exception
Console.WriteLine($"Error al ejecutar WMIC: {ex.Message}")
End Try
Console.WriteLine("Presiona cualquier tecla para salir.")
Console.ReadKey()
End Sub
End Module
Esto daría la siguiente salida (solo es un ejemplo):
Consultando detalles de la red activa mediante WMIC...
Resultados de WMIC:
MACAddress Name NetConnectionID Speed
E4:XX:71:XX:C3:XX Intel(R) Wi-Fi 6E AX211 160MHz Wi-Fi 866700000
Presiona cualquier tecla para salir.
Como vemos, podríamos obtener datos del hardware sin tener que instalar nada adicional, más que habilitar los componentes para poder usarlos desde Visual Studio o SharpDevelop (ya instalados con Windows) y comenzar a usarlos dentro de nuestro programa. Luego, la salida la podemos procesar y usarla en nuestro software que estemos desarrollando.
Microsoft jubila a WMIC:
"¿Por qué Microsoft ha decidido descontinuar a WMIC si es tan útil?", bueno, si por algo es conocido Windows es por sus eternos fallos de seguridad: durante los 90's y parte del 2000 antes de que Windows XP se estableciera como el sistema operativo dominante, malwares de todo tipo abusaban del archivo autoexec.bat y otras vulnerabilidades del mundo MS-DOS; con la llegada de Windows XP se eliminó de un plumazo muchos de esos fallos y "N" cantidad de programas maliciosos quedaron obsoletos en poco tiempo.
Ahora Microsoft pretende hacer lo mismo con WMIC ya que este no tiene herramientas de seguridad y seguimiento integradas, PowerShell que es la evolución de la clásica consola de comandos si las tiene. Aunque PowerShell no es inmune al malware que puede usar WMIC y sin problemas podría usar PowerShell, al menos queda un registro detallado de su uso y alertar a los administradores de servidores si algo anda por ahí.
Otras aplicaciones jubiladas por Microsoft:
Microsoft ahora recomienda usar PowerShell como reemplazo de WMIC, también, en el transcurso de pocos años hemos visto la retirada de las siguientes aplicaciones y es probable que no sean las únicas en el corto plazo:
- Wordpad
- Escritorio remoto (funcionando, pero descontinuado por Microsoft)
- Skype
- Módem
Conclusiones:
Microsoft al igual que Linux han decidido sacar la escoba y quitar aquello que ya no necesitan, es una lástima por WMIC pero habrá que comenzar a portar los scripts que habíamos desarrollado a PowerShell. Mil gracias por tomarse el tiempo para leer este artículo, un saludo para todos y un agradecimiento a Dedoimedo por la imagen de portada para este artículo.