2017-09-26 7 views
2

J'ai un script qui contient un appel à winrs afin de démarrer à distance l'exécution d'un fichier .exe sur une machine cible spécifiée par l'utilisateur.Le script Batch cesse d'être exécuté après la commande winrs

Je veux les fonctionnalités suivantes:

  • script de démarrage
  • utilisateur rapide pour le nom de la cible PC
  • winrs dans la cible PC exécutant le .exe et dire utilisateur qui a exécuté le script que cela est terminé.
  • arrête l'exécution de winrs et indique à l'utilisateur qui a exécuté le script qu'il a terminé.
  • sortie.
  • Je veux toutes les sorties sur la machine sur laquelle le script a été exécuté et ne veux pas montrer d'activité sur la machine cible.

Le code que j'ai est la suivante:

@echo off 

echo ------------------------------------------------------- 
echo PLEASE ENTER PC NAME OF DISCONNECTED MACHINE 
echo ------------------------------------------------------- 
SET /p pcToReconnect= 
echo Attempting to contact Agent. 

call winrs -r:%pcToReconnect% "C:\Path\To The\exe that I want\toExecute.exe" >> logfile.txt 2>>&1 

echo Agent reconnected. Please allow ~5mins for your management console to update. 

Le code exécute jusqu'à ce que les winrs appellent, et il ne enfait exécuter le fichier .exe sur la machine cible, mais il semble donc que la coquille à distance reste juste ouvert ne faisant rien après cela. Si j'appuie sur ctrl + c à ce stade, "Terminer le shell? (Y/n)" est placé dans mon fichier journal (mais pas de sortie dans l'invite cmd) et je peux alors appuyer sur "y" et entrer, sur lequel le shell distant se termine et "Terminate batch job (Y/N)" apparaît dans l'invite cmd, mais la dernière instruction echo ne s'exécute jamais.

Comment puis-je obtenir la fermeture automatique du shell distant après l'exécution du fichier .exe et renvoyer une sorte de confirmation que le script s'est terminé à l'invite de celui qui l'a exécuté?

Toute aide appréciée!

Répondre

0

Vous utilisez call qui exécute une nouvelle fenêtre cmd.exe et exécute winrs dans cette nouvelle fenêtre et quitte. Retirez-le et cela fonctionnera. J'ai ajouté une pause à la fin, au cas où vous exécutez le lot en double-cliquant dessus.

@echo off

EDIT

Après une analyse, il semble que le lot attend le programme pour terminer, il serait donc possible d'appeler simplement avec démarrage qui devrait l'appeler et revenez à l'invite d'origine.

start winrs -r:%pcToReconnect% "C:\Path\To The\exe that I want\toExecute.exe" >> logfile.txt 2>>&1 
+0

Ceci avait exactement le même comportement. Je pensais que l'appel venait de s'assurer que le script revenait à lui-même après avoir appelé la commande spécifiée? Pause est un conseil utile pour courir en double cliquant si vous le souhaitez! –

+0

@CiaranMcKenzie quelle commande exécutez-vous? il est supposé sortir après le lancement du virgule. Peut-être tester la commande elle-même, remplacez donc la commande par quelque chose comme une commande ping. et voir si ça revient? –

+0

Je veux exécuter un fichier .exe à distance en saisissant simplement son chemin/nom dans un cmd distant. J'ai les deux pcs ici, donc quand je cours votre code ou code, le.exe est exécuté à distance sur la machine cible car je peux voir que les services concernés ont démarré sur cette machine, et le fichier journal est sans erreur. Donc, l'objectif final réel de l'exécution de ce fichier .exe en arrière-plan de la cible est atteint. C'est comme si le script s'arrêtait alors, le fichier .exe a été exécuté sur la machine distante, les erreurs/succès sont enregistrés dans le fichier journal, puis je suis assis à une invite et le dernier écho n'arrive jamais. –