Skrypt jest dość prosty. Po prostu próbuje uruchomić kilka usług Windows. Wykonanie lokalne działa poprawnie na komputerze docelowym. Skrypt faktycznie działa dobrze, gdy jest wykonywany za pomocą PsExec, po prostu nigdy nie wraca, dopóki nie naciśniesz klawisza „enter” w wierszu polecenia CMD. Jest to problem, ponieważ jest wywoływany z TeamCity i powoduje, że agent zawiesza się i czeka na powrót PsExec.
Próbowałem następujące:
- Dodanie
exit
iexit 0
na końcu skryptu Powershell - Dodanie a
< NUL
na końcu wywołania PsExec, zgodnie z odpowiedzią na to pytanie SF - Dodanie
>
przekierowania standardowego
Właśnie tak nazywam psexec:
psexec \\target -u domain\username -p password powershell c:\path\script.ps1
Bez względu na to, co robię, zawiesza się, dopóki nie lokalnie w wierszu polecenia cmd. Po wciśnięciu Enter otrzymuję komunikat:
powershell exited on target with error code 0.
źródło
Wiem, że odpowiedź spóźnia się, już by się domyśliła. Jeśli nie, może być przydatna dla przyszłych gości.
STDIN musi zostać przekierowany w celu wykonania PowerShell, aby mógł pochodzić z zawieszenia (tutaj czeka w STDIN). aby móc to zrobić, użyj -inputformat none
powershell -inputformat none -File powershell_script.ps1
będzie działać.Sprawdź - https://connect.microsoft.com/PowerShell/feedback/details/572313/powershell-exe-can-hang-if-stdin-is-redirected
źródło
Naprawia także problem.
-d
Flaga dla PsExec jest jak „w biegu i zjazd” w nieinterakcyjnym sposób:źródło
PowerShell nie wychodzi. Wypróbuj ten wiersz poleceń
źródło
Biegałam
psexec
ze skryptu VBS i roztwór oznaczony jako najlepszy (nppsexec \\target -u domain\username -p password cmd /c "echo . | powershell c:\path\script.ps1"
) pracował dla mnie tylko podczas każdego 3 lub tak zaniedbany. Kopałem dalej i znalazłem opis każdego przełącznikaPostanowiłem spróbować „-s” i to, co działało dla mnie za każdym razem Oto mój przykład:
źródło