2009-05-14 14 views
9

Je voudrais qu'un serveur Windows 2003 déclenche un script pour déclencher un autre script sur un ordinateur Windows Server 2008 distinct.Comment puis-je exécuter à distance un script sous Windows?

On m'a dit que Powershell peut le faire, et c'est très bien, mais j'ai besoin de plus de détails spécifiques.

Quelqu'un a-t-il des conseils pour cela?

Merci!

+0

Cette question est probablement mieux adaptée à serverfault.com. J'ai marqué pour fermer pour cette raison; stackoverflow prend désormais en charge les questions en mouvement entre les sites. –

Répondre

14

psexec de SysInternals

+0

Cela semble être la meilleure réponse. Je vais essayer au travail demain. –

0

La solution acceptée de http://www.experts-exchange.com/OS/Microsoft_Operating_Systems/Q_22959948.html est:

Ce que je fournis est un script qui prend paramètres ... Dans ce cas, il faut 4. 1) Serveur: si vous passez -server il sera seulement faire un serveur 2) Liste: Vous pouvez fournir un fichier de liste des serveurs. 3) Service: Nom du service que vous voulez 4) Verbose: n'est pas utilisé ici. J'ai eu quelques erreurs que j'ai changé dans le code suivant. Pour utiliser , copiez/collez le code dans un fichier appelé Set-RemoteService.ps1. Assurez-vous de définir votre exécutionpolicy pour exécuter scripts ... ce ne sera pas par défaut. Pour ce faire, utilisez la cmdlet set-executionpolicy. PS> Set-ExecutionPolicy "RemoteSigned" pour exécuter le script que vous faites PS> C: \ PathToScript \ Set-RemoteService.ps1 -list c: \ serverlist.txt -Service "DHCP"

#### ##################### Param ($ serveur, $ liste, $ service, [commutateur] $ verbose)

if ($ Verbose) {$ VerbosePreference = "Continuer"} if (liste $) { foreach (SRV $ dans (get-content liste $)) { $ query = "select * from Win32_Service où Name = '$ service'" $ myService = get- WmiObject -query $ query -computer $ srv $ monService.ChangeStartMode ("Automatique") $ myService.Start() }} if ($ server) { $ query = "select * from Win32_Service où Name = '$ service'" $ myService = get-WmiObject -query $ query -ordinateur $ serveur $ myService.ChangeStartMode ("automatique") $ myService.Start()}

+0

Ce script démarre les services existants sur un ordinateur distant, mais n'exécute pas de scripts arbitraires. –

6

Regardez dans la syntaxe de la commande AT. Vous pouvez l'utiliser pour planifier un processus à exécuter sur une machine distante.

La commande AT programme les commandes et les programmes à exécuter sur un ordinateur à à une heure et à une date spécifiées. Le service de planification doit être en cours d'exécution pour utiliser la commande 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

parler de PsExec, je serais fortement suggère d'utiliser à la place Cygwin/OpenSSH.SSH présente de multiples avantages (sur des outils comme PsExec ou même des services personnalisés).
Par exemple, essayez d'utiliser avec PsExec et mettre en œuvre ce que ces bash/ssh lignes de commande font:

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 

Bonne chance!

  • transferts SSH (!) Statut stdout/stderr/sortie à distance à shell pour une inspection
    (fonction tueur et exigence commune d'intégrer l'exécution à distance dans la logique des scripts locaux)

  • Cygwin/OpenSSH fournit standard environnement shell POSIX
    (investissement temps efficace, outils fondamentaux, prêts multiplateformes, habitudes compatibles, etc.)

  • Vous pouvez toujours/courir toujours tous natif l'application de Windows
    (y compris l'exécution automatique de *.bat fichiers par cmd processeur)

  • Vous pouvez configurer un mot de passe moins auth à l'aide des clés publiques
    (pensez à automatisé sans surveillance tâches)


Tip

Il y avait une exigence que j'avais des problèmes avec d'abord:
fond sshd le service devait exécuter des applications en session graphique de l'utilisateur
(pour faire la fenêtre d'application apparaissent dans l'environnement de bureau).

Le acceptable solution pour moi était en cours d'exécution sshd services directement dans l'interface graphique de l'utilisateur session
(démarre automatiquement lorsque l'utilisateur se connecte, suivez le lien pour voir les modifications du fichier de configuration):

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

Je suis en train d'utiliser SSH, fwiw. Le problème est que SSH ne peut pas démarrer un programme gui (même si ce programme gui n'a pas de gui ...) –

+0

@Frew, le [lien] (http://spectlog.com/content/Run_cygwin_sshd_in_user_seesion_to_start_GUI_application) à partir de la pointe spécifiquement adresses exécuter des applications GUI à distance sur Windows.Et à mon avis, il n'y a pas de solution plus simple et plus * harmonique * à ce problème (du moins dans le contexte où je devais y faire face). Si l'hôte Windows en question existe pour un rôle de serveur pur, il se peut que vous deviez vous connecter automatiquement à cet utilisateur après chaque redémarrage (afin que la session de bureau et 'sshd' restent actifs tout le temps). – uvsmtid

+0

Je vais peut-être réexaminer la question, mais j'ai eu de gros problèmes avec le projet (tests automatisés d'un installateur NSIS) au point que j'ai dû abandonner complètement. –

3

manière la plus simple qui est l'utilisation se fera en deux étapes

a. installation de cygwin sur un PC distant

b. exécutez ssh hudson @ mcs '/cygdrive/c/path_to_script.bat'

Questions connexes