Das Skript ist ziemlich einfach. Versucht einfach, eine Reihe von Windows-Diensten zu starten. Die lokale Ausführung funktioniert auf dem Zielcomputer einwandfrei. Das Skript wird auch über PsExec einwandfrei ausgeführt. Es wird nur dann zurückgegeben, wenn ich an meiner CMD-Eingabeaufforderung die Eingabetaste drücke. Dies ist ein Problem, da dies von TeamCity aufgerufen wird und der Agent hängen bleibt und auf die Rückkehr von PsExec wartet.
Ich habe folgendes versucht:
- Hinzufügen eines
exit
undexit 0
am Ende des Powershell-Skripts - Hinzufügen eines
< NUL
am Ende des PsExec-Aufrufs gemäß der Antwort in dieser SF-Frage - Hinzufügen einer
>
Standardumleitung
So rufe ich eigentlich psexec an:
psexec \\target -u domain\username -p password powershell c:\path\script.ps1
Egal was ich mache, es hängt bis ich lokal an der cmd Eingabeaufforderung bin. Nachdem ich die Eingabetaste gedrückt habe, wird folgende Meldung angezeigt:
powershell exited on target with error code 0.
quelle
Ich weiß, dass die Antwort zu spät kommt und bereits herausgefunden worden wäre. Wenn nicht, könnte sie für zukünftige Besucher nützlich sein.
STDIN muss in der Powershell-Ausführung umgeleitet werden, um aus dem Hang kommen zu können (hier wartet es in STDIN). Um dies tun zu können, verwenden Sie -inputformat none
powershell -inputformat none -File powershell_script.ps1
wird funktionieren.Überprüfen Sie - https://connect.microsoft.com/PowerShell/feedback/details/572313/powershell-exe-can-hang-if-stdin-is-redirected
quelle
Behebt auch das Problem.
Die
-d
Flagge für psexec ist auf nicht interaktive Weise wie "Ausführen und Beenden":quelle
Powershell wird nicht beendet. Versuchen Sie diese Befehlszeile
quelle
Ich wurde
psexec
mit einem VBS-Skript ausgeführt und die als die beste (EX :) gekennzeichnete Lösungpsexec \\target -u domain\username -p password cmd /c "echo . | powershell c:\path\script.ps1"
funktionierte nur bei jedem dritten Lauf für mich. Ich grub weiter und fand eine Beschreibung für jeden SchalterIch habe beschlossen, "-s" auszuprobieren und das, was jedes Mal für mich funktioniert hat. Hier ist mein Beispiel:
quelle