Le script est assez simple en avant. Essaie simplement de démarrer un groupe de services Windows. L'exécution fonctionne localement bien lorsque sur la machine cible. Le script exécute effectivement une amende aussi bien lorsqu'il est fait via Psexec, il ne revient jamais que si je n'apporte que la touche "Entrée" de mon invite CMD. C'est un problème, car cela est appelé à partir de TeamCity et que l'agent pendentif en attendant que PSExec revienne.
J'ai essayé ce qui suit:
exit
et exit 0
à la fin du script PowerShell< NUL
à la fin de l'appel Psexec, par la réponse dans cette question SF>
stdout redirectVoici comment j'appelle réellement Psexec:
psexec \\target -u domain\username -p password powershell c:\path\script.ps1
Peu importe ce que je fais, il se bloque jusqu'à ce que je soit localement sur l'invite CMD. Après avoir frappé Entrée, je reçois le message:
powershell exited on target with error code 0.
S'avère que ceci est un problème courant. Trouvé la solution a ici . Essentiellement, si vous conduisez certaines données sur STDIN avec CMD, cela reviendra bien après l'exécution (car elle est exécutée via CMD, pas PowerShell).
Exemple:
psexec \\target -u domain\username -p password cmd /c "echo . | powershell c:\path\script.ps1"
Je sais que la réponse arrive en retard Cela aurait déjà été déterminée, sinon cela pourrait être utile pour les futurs visiteurs.
STDIN doit être ré-dirigé dans l'exécution de PowerShell Inoorder pour pouvoir venir de suspension (ici elle attend à STDIN). être capable de faire cette utilisation -Inputformat aucun
powershell -inputformat none -File powershell_script.ps1
marchera.
psexec \\target -u domain\username -p password -d powershell c:\path\script.ps1
Corrige également le problème.
Les -d
drapeau pour psexec est comme "Exécuter et sortir" de manière non interactive:
-D N'attendez pas que l'application se termine.
Utilisation uniquement pour les applications non interactives.
PowerShell ne sort pas. Essayez cette ligne de commande
Powershell -command script.ps1
J'étais en cours d'exécution psexec
avec script VBS et la solution marquée comme le meilleur (ex: psexec \\target -u domain\username -p password cmd /c "echo . | powershell c:\path\script.ps1"
) travaillait pour moi seulement pendant chaque 3ème ou deux fois. Je continuais à creuser et j'ai trouvé Description de chaque commutateur
J'ai décidé d'essayer "-s" et que ce qui a fonctionné pour moi chaque fois ici est mon exemple:
call C:\psexec.exe %SERVER_NAME% -u %USERNAME% -p %PASSWORD% -h -s cscript %pathTomyVBSscript%