• RSS
  • Facebook
  • Twitter
  • Linkedin
  • Google +
  • Youtube

En esta entrada vamos a explicar cómo podemos ejecutar un comando sobre un servidor remoto con la tecnología WMI (Instrumental de administración de Windows). Que como muchos sabréis dicha tecnología es algo “oscura” y hay muy poca información por Internet, pero que a la vez, es bastante potente ya que podemos tener acceso a la administración de un máquina a través de Web.

Definición de WMI de la Wikipedia:

“Windows Management Instrumentation o WMI (en español, Instrumental de administración de Windows) es la implementación de WBEM (Web-Based Enterprise Management) de Microsoft, una iniciativa que pretende establecer normas estándar para tener acceso y compartir la información de administración a través de la red de una empresa.
WMI proporciona compatibilidad integrada para el Modelo de Información Común (CIM, Common Information Model), :Y que describe los objetos existentes en un entorno de administración.”

Una vez leída la “poca” documentación que hay, vamos a ponernos manos a la obra. Vamos a desarrollar un pequeño método que sea capaz de conectarse vía WMI a un servidor remoto y ejecutar cualquier comando. Para ello, deberemos tener una cuenta de usuario con privilegios de ejecución.

Este pedazo de código está subido ya en nuestro repositorio de GitHub DomiLibrary,  en la ruta “DomiLibrary.Utility/Helper/WmiHelper.cs”. Si queréis usarlo directamente en vuestra solución con el Visual Studio, ejecutar en la consola de NuGet: PM> Install-Package DomiLibrary.Utility

using System;
using System.Management;

namespace DomiLibrary.Utility.Helper
{
///
/// WMI Helper
///
public class WmiHelper
{
///
/// Invoca un comando en un servidor remotamente.
///

///////////////
public static string InvokeRemoteCommand(string ipServer, string user, string password, string command)
{
try
{
var processToRun = new[] { command };
var connection = new ConnectionOptions { Username = user, Password = password };
var wmiScope = new ManagementScope(String.Format("\\\\{0}\\root\\cimv2", ipServer), connection);
var wmiProcess = new ManagementClass(wmiScope, new ManagementPath("Win32_Process"), new ObjectGetOptions());
var result = wmiProcess.InvokeMethod("Create", processToRun);

return result.ToString();
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
}
}

Explicación:

  • La primer linea es la encargada de recoger los comandos a ejecutar, podrían ser más de uno.
  • La linea siguiente se encarga de pasar las credenciales de conexión al servidor.
  • La tercera linea realiza la conexión y se sitúa en la extensión correcta del servidor para su administración.
  • La cuarta se situarse en el path de administración donde están los procesos.
  • Y por último ejecuta el comando remótamente.

A tener en cuenta que si todo ha ido bien el resultado que devolverá será “0”.

Esperamos que os sea de mucha utilidad la entrada.

PD: ¿Alguien conoce enlaces interesantes sobre WMI?

The following two tabs change content below.
Empresa de Hosting & IT Consulting

Latest posts by Domitienda (see all)

Categorías: .NET

Deja un comentario