¿Cómo ejecutar un comando en una computadora remota?

Tengo una carpeta compartida en un servidor y necesito ejecutar remotamente un comando en algunos archivos. ¿Cómo puedo hacer eso?

¿Qué servicios deben ejecutarse en el servidor para que funcionen?

Algunos detalles: solo se puede usar C #. Nada se puede instalar en el servidor.

Otra solución es usar WMI.NET o Windows Management Instrumentation .

Usando el espacio de nombres de .NET Framework System.Management, puede automatizar tareas administrativas utilizando Windows Management Instrumentation (WMI).

Muestra de código

var processToRun = new[] { "notepad.exe" }; var connection = new ConnectionOptions(); connection.Username = "username"; connection.Password = "password"; var wmiScope = new ManagementScope(String.Format("\\\\{0}\\root\\cimv2", REMOTE_COMPUTER_NAME), connection); var wmiProcess = new ManagementClass(wmiScope, new ManagementPath("Win32_Process"), new ObjectGetOptions()); wmiProcess.InvokeMethod("Create", processToRun); 

Si tiene problemas con la autenticación, entonces verifique la configuración de DCOM.

  1. En la máquina de destino, ejecute dcomcnfg desde el símbolo del sistema.
  2. Expanda Component Services\Computers\My Computer\DCOM Config
  3. Busque la Instrucción de administración de Windows, identificada con el GUID 8BC3F05E-D86B-11D0-A075-00C04FB68820 (puede ver esto en la vista de detalles).
  4. Edite las propiedades y luego agregue el nombre de usuario con el que está intentando iniciar sesión en la pestaña de permisos.
  5. Es posible que deba reiniciar el servicio o toda la máquina.

NOTA: todas las rutas utilizadas para el proceso remoto deben ser locales para la máquina de destino.

Puede usar PsExec de SysInternal .

OMI, en tu caso puedes probar esto:

  1. Asigna la carpeta compartida a una unidad o carpeta en tu máquina. ( Así es como )
  2. Acceda a la unidad / carpeta asignada como lo haría normalmente con los archivos locales.

Nada necesita ser instalado. No es necesario que se ejecuten servicios, excepto aquellos que permiten compartir carpetas.

Si puede acceder a la carpeta compartida y la asigna a su máquina, la mayoría de las cosas deberían funcionar igual que los archivos locales, incluidas las solicitudes de comando y todas las herramientas de mejora del explorador.

Esto es diferente al uso de PsExec (o RDP-ing in) en el sentido de que no necesita derechos administrativos ni derechos de conexión de servicios remotos de escritorio / terminal en el servidor remoto, solo necesita poder acceder a esas carpetas compartidas.

También asegúrese de tener todos los permisos de seguridad necesarios para ejecutar los comandos / herramientas que desee ejecutar en esas carpetas compartidas también.


Si, sin embargo, desea que el procesamiento se realice en la máquina de destino, puede probar PsExec como @divo y @recursive señalados, algo a lo largo de:

 PsExec \\yourServerName -u yourUserName cmd.exe 

Which trae trae le da un símbolo del sistema en la máquina remota. Y desde allí puedes ejecutar lo que quieras.

No estoy seguro, pero creo que necesita el servidor ( lanmanserver ) o el servicio de Terminal Services ( TermService ) para ejecutar (que ya debería estar ejecutándose).

 try { string AppPath = "\\\\spri11U1118\\SampleBatch\\Bin\\"; string strFilePath = AppPath + "ABCED120D_XXX.bat"; System.Diagnostics.Process proc = new System.Diagnostics.Process(); proc.StartInfo.FileName = strFilePath; string pwd = "s44erver"; proc.StartInfo.Domain = "abcd"; proc.StartInfo.UserName = "sysfaomyulm"; System.Security.SecureString secret = new System.Security.SecureString(); foreach (char c in pwd) secret.AppendChar(c); proc.StartInfo.Password = secret; proc.StartInfo.UseShellExecute = false; proc.StartInfo.WorkingDirectory = "psexec \\\\spri11U1118\\SampleBatch\\Bin "; proc.Start(); while (!proc.HasExited) { proc.Refresh(); // Thread.Sleep(1000); } proc.Close(); } catch (Exception ex) { throw ex; } 

Utilizo la pequeña utilidad que viene con PureMPI.net llamada execcmd.exe . Su syntax es la siguiente:

 execcmd \\yourremoteserver  

No hay nada más simple que esto 🙂