2009-05-14 23 views
9

Me gustaría que un servidor de Windows 2003 active una secuencia de comandos para iniciar otra secuencia de comandos en una computadora con Windows Server 2008.¿Cómo puedo ejecutar de forma remota un script en Windows?

Me han dicho que Powershell puede hacer eso, y eso está bien, pero necesito detalles más específicos.

¿Alguien tiene algún consejo para esto?

Gracias!

+0

Esta pregunta probablemente sea más adecuada para serverfault.com. He marcado para cerrar por esta razón; stackoverflow ahora es compatible con preguntas en movimiento entre sitios. –

Respuesta

14

psexec de SysInternals

+0

Esta parece ser la mejor respuesta. Lo intentaré en el trabajo mañana. –

0

La solución aceptada de http://www.experts-exchange.com/OS/Microsoft_Operating_Systems/Q_22959948.html es:

Lo que proporciono era un guión que lleva parámetros ... En este caso se necesita 4. 1) Servidor: si pasa -server lo hará solo haga ese servidor 2) Lista: Usted puede proporcionar un archivo de lista de servidores. 3) Servicio: Nombre del servicio que quiere modificar 4) Detallado: no es usado aquí.

Tuve algunos errores que I han cambiado en el siguiente código. Para usar corte/pegue el código en un archivo llamado Set-RemoteService.ps1. Asegúrese de configurar su política de ejecución para ejecutar scripts ... no lo hará de forma predeterminada. Usted lo hace mediante el uso del cmdlet set-executionpolicy . PS> Set-executionpolicy "RemoteSigned" a ejecutar el guión que hace PS> C: \ PathToScript \ Set-RemoteService.ps1 -lista c: \ serverlist.txt -service "DHCP"

#### ##################### Param ($ server, $ list, $ service, [switch] $ verbose)

if ($ Detallado) {$ VerbosePreference = "Continuar"} if ($ lista) { foreach ($ SRV en (lista $ get-content)) { $ consulta = "SELECT * FROM Win32_Service donde nombre = '$ servicio'" $ myService = Get- WmiObject -query $ query -ordenador $ srv $ myService.ChangeStartMode ("Automático") $ myService.Start() }} if ($ servidor) { $ consulta = "SELECT * FROM Win32_Service donde nombre = '$ servicio'" $ myService = get-WmiObject -query $ consulta -computer servidor $ $ myService.ChangeStartMode ("automático") $ myService.Start()}

+0

Este script inicia servicios existentes en una computadora remota, pero no ejecuta scripts arbitrarios. –

6

Mira en la sintaxis para el comando AT. Puede usarlo para programar un proceso para que se ejecute en una máquina remota.

El comando AT programa comandos y programas para ejecutar en una computadora al una hora y fecha especificadas. El servicio Schedule debe estar ejecutándose para usar el comando AT.

AT [\\computername] [ [id] [/DELETE] | /DELETE [/YES]] 
AT [\\computername] time [/INTERACTIVE] 
    [ /EVERY:date[,...] | /NEXT:date[,...]] "command" 

\\computername  Specifies a remote computer. Commands are scheduled on the 
        local computer if this parameter is omitted. 
id     Is an identification number assigned to a scheduled 
        command. 
/delete   Cancels a scheduled command. If id is omitted, all the 
        scheduled commands on the computer are canceled. 
/yes    Used with cancel all jobs command when no further 
        confirmation is desired. 
time    Specifies the time when command is to run. 
/interactive  Allows the job to interact with the desktop of the user 
        who is logged on at the time the job runs. 
/every:date[,...] Runs the command on each specified day(s) of the week or 
        month. If date is omitted, the current day of the month 
        is assumed. 
/next:date[,...] Runs the specified command on the next occurrence of the 
        day (for example, next Thursday). If date is omitted, the 
        current day of the month is assumed. 
"command"   Is the Windows NT command, or batch program to be run. 
1

Hablando de PsExec, me fuertemente sugieren usar Cygwin/OpenSSH en su lugar.

SSH tiene múltiples ventajas (sobre herramientas como PsExec o incluso servicios a medida).
Por ejemplo, trate de usar con PsExec y poner en práctica lo que estos bash/ssh líneas de comandos hacen:

ssh [email protected] "find . -name something" 2> all.errors.txt 
ssh [email protected] "grep -r something ." 
if [ "$?" == "0" ] 
then 
    echo "FOUND" 
else 
    echo "NOT FOUND" 
fi 

buena suerte!

  • transferencias SSH (!) De estado remoto stdout/stderr/salida a cáscara local para la inspección
    (función única y requisito común para integrar la ejecución remota en la lógica de secuencias de comandos locales)

  • Cygwin/OpenSSH proporciona estándar entorno de shell POSIX
    (inversión de tiempo eficiente, herramientas fundamentales, compatibilidad multiplataforma, hábitos compatibles, etc.)

  • Puede todavía/siempre se ejecutan todos nativos aplicación Windows
    (incluida la ejecución automática de *.bat archivos por cmd procesador)

  • Puede configurar sin contraseña de autenticación mediante claves públicas
    (pensar automatizado desatendida tareas)


Tip

No era uno de los requisitos que tenía problemas con un principio:
fondo sshd servicio tenía para ejecutar aplicaciones en la sesión gráfica de usuario
(para hacer ventana de la aplicación aparece en el entorno de escritorio).

El acceptable solution para mí corría sshd servicio directamente en sesión de la GUI del usuario
(se inician automáticamente al usuario se conecta, siga el enlace para ver cambios en los archivos de configuración):

/usr/sbin/sshd -f /home/user/sshd_config 
+0

En realidad estoy usando SSH, fwiw. El problema es que SSH no puede iniciar un programa gui (aunque dicho programa gui no tiene GUI ...) –

+0

@Frew, el [enlace] (http://spectlog.com/content/Run_cygwin_sshd_in_user_seesion_to_start_GUI_application) del consejo específicamente direcciones ejecutar aplicaciones de GUI de forma remota en Windows.Y en mi opinión, no hay una solución más simple y más * armónica * para este problema (al menos en el contexto en que tuve que lidiar con eso). Si el host de Windows en cuestión existe para una función de servidor puro, es posible que aún necesite iniciar sesión automáticamente después de cada reinicio (para que la sesión de escritorio y 'sshd' permanezcan activos todo el tiempo). – uvsmtid

+0

Puedo investigarlo nuevamente, pero tuve problemas muy importantes con el proyecto para el que esto era (pruebas automatizadas de un instalador de NSIS) hasta el punto en que tuve que renunciar por completo. –

3

forma más fácil que es el uso será en dos pasos

a. instalar cygwin en la pc remota

b. ejecutar ssh hudson @ mcs '/cygdrive/c/path_to_script.bat'

Cuestiones relacionadas