Tecnología

Inicio

Cómo ejecutar un proceso en un PC remoto con Wmi

Cómo ejecutar un proceso en un PC remoto con Wmi


WMI (Windows Management Instrumentation) se utiliza para controlar las tareas de gestión en cualquier interfaz de Windows. La infraestructura está dirigido a programadores de C / C ++, pero puede ser implementado por los programadores que utilicen cualquier lenguaje de programación compatible con Windows, como VBScript. WMI es una poderosa herramienta para los procesos administrativos en el servidor local, pero es particularmente útil para las máquinas remotas. Con el fin de WMI para acceder a un ordenador remoto, el equipo remoto debe permitir que pase el servidor de seguridad.

Instrucciones

1 Establecer permisos en el equipo remoto. Si un administrador en "Equipo A" tiene que acceder a "equipo B", se le debe permitir más allá del firewall "equipo B". Iniciar sesión en "equipo B" y abra el símbolo del sistema. Haga clic en "Inicio", "Ejecutar", escriba "cmd.exe" y presionar "Enter".

2 Escriba lo siguiente en el símbolo del sistema: "netsh firewall set servicio RemoteAdmin enable" y presionar "Enter".

3 Crear un localizador de objetos WBI con el código siguiente:

Establecer objSWbemLocator = CreateObject ( "WbemScripting.SWbemLocator")

4 Conectarse al equipo remoto a través del "Método SWbemLocator.ConnectServer." Esta función devuelve un objeto "SWbemServices", que se utiliza para ejecutar comandos a través de la conexión remota:

objwbemServices = SWbemLocator.ConnectServer (_

[ByVal strServer], _

[ByVal strNamespace], _

[ByVal strUser], _

[ByVal strPassword], _

[ByVal strLocale], _

[ByVal strAuthority], _

[ByVal iSecurityFlags], _

[ByVal objwbemNamedValueSet] _

)

Dónde:

strServer es el nombre del equipo remoto.

strNamespace puede dejarse en blanco.

strUser es el nombre de usuario que se utilizará para iniciar sesión en el equipo remoto.

strPassword es la contraseña para el usuario en el equipo remoto.

strLocale puede dejarse en blanco.

strAuthority también puede dejarse en blanco.

iSecurityFlags se puede ajustar a (0x0) para hacer que el script continuar intentando la conexión hasta que se establezca una conexión. La alternativa es (0x80), en cuyo caso la conexión intentará cargar por dos minutos, luego mueren.

objwbemNamedValueSet puede dejarse en blanco.

Para continuar con el ejemplo:

Establecer objWMIService = objSWbemLocator.ConnectServer ( "Algunos

PC",

, _

"Some_user", _

"Some_pass", _

"", _

"") 5 Ejecutar un comando con la "Clase Win32_Process." Esta función se ejecutará un comando en el equipo remoto. Utilice la sintaxis MS-DOS para ejecutar comandos en esta función:

Crear uint32 (

[En] CommandLine cadena,

[En] CurrentDirectory cadena,

[En] Win32_ProcessStartup ProcessStartupInformation,

[Fuera] uint32 ProcessId

);

Dónde:

CommandLine es la línea de comandos que se va a ejecutar en la máquina remota.

CurrentDirectory se debe establecer en nulo a menos que haya una razón para especificar un directorio.

Win32_ProcessStartup ProcessStartupInformation debe ser el objeto de conexión. En este caso, será el objeto SWbemLocator.ConnectServer creado en el paso anterior.

ProcessId se convertirá en una variable global que contiene el ID de proceso de este comando. Introduzca un nombre de variable única aquí.

La función devuelve "0" si el proceso tiene éxito. números de código de error se devuelven a los procesos fallidos. Para nuestro ejemplo, la función se puede escribir:

Establecer objProcess = objWMIService.Get ( "Win32_Process")

intReturn = objProcess.Create _

("Some_Command", Null, objWMIService, intProcessID)

Si intReturn <> 0 Then

Wscript.Echo "Process could not be created." & _

vbNewLine y "Línea de comandos:" Y strCommand & _

vbNewLine y "Valor de retorno:" & intReturn

Más

Wscript.Echo "Process created." & _

vbNewLine y "Línea de comandos:" Y strCommand & _

vbNewLine y "ID de proceso:" Y intProcessID

Terminara si

6 Guarde el código en un archivo VBScript (con extensión ".vbscript"). El ejemplo de código entero para conectarse a un equipo remoto y ejecutar un proceso es:

Establecer objSWbemLocator = CreateObject ( "WbemScripting.SWbemLocator")

Establecer objWMIService = objSWbemLocator.ConnectServer ( "Algunos

PC",

, _

"Some_user", _

"Some_pass", _

"", _

"")

Establecer objProcess = objWMIService.Get ( "Win32_Process")

intReturn = objProcess.Create _

("Some_Command", Null, objWMIService, intProcessID)

Si intReturn <> 0 Then

Wscript.Echo "Process could not be created." & _

vbNewLine y "Línea de comandos:" Y strCommand & _

vbNewLine y "Valor de retorno:" & intReturn

Más

Wscript.Echo "Process created." & _

vbNewLine y "Línea de comandos:" Y strCommand & _

vbNewLine y "ID de proceso:" Y intProcessID

Terminara si

7 Haga clic en el nombre del archivo y seleccionar "Propiedades". Marque la casilla "Permitir la ejecución de este archivo." Haga clic en "Aplicar". Haga doble clic en el archivo para ejecutar el proceso.