Сценарий довольно прост. Просто пытается запустить кучу служб Windows. Выполнение локально работает нормально, когда на целевой машине. Сценарий на самом деле также работает нормально, когда выполняется через PsExec, он просто никогда не возвращается, пока я не нажму клавишу «enter» в моем приглашении CMD. Это проблема, потому что это вызывается из TeamCity, и это заставляет Агента зависать в ожидании возврата PsExec.
Я пробовал следующее:
- Добавление
exit
иexit 0
в конце скрипта Powershell - Добавление a
< NUL
в конец вызова PsExec согласно ответу на этот вопрос SF - Добавление
>
перенаправления stdout
Вот как я на самом деле вызываю psexec:
psexec \\target -u domain\username -p password powershell c:\path\script.ps1
Независимо от того, что я делаю, он зависает, пока я локально на приглашение cmd. После нажатия Enter я получаю сообщение:
powershell exited on target with error code 0.
источник
Я знаю, что ответ приходит с опозданием, его бы уже выяснили, если бы не он был полезен для будущих посетителей.
STDIN должен быть перенаправлен в порядке выполнения PowerShell, чтобы иметь возможность прийти из зависания (здесь он ожидает в STDIN). чтобы иметь возможность сделать это использовать -inputformat нет
powershell -inputformat none -File powershell_script.ps1
буду работать.Проверьте - https://connect.microsoft.com/PowerShell/feedback/details/572313/powershell-exe-can-hang-if-stdin-is-redirected
источник
Также исправляет проблему.
-d
Флаг для PsExec , как «запуск и выход» в не интерактивном режиме:источник
Powershell не выходит. Попробуйте эту командную строку
источник
Я работал
psexec
со сценарием VBS, и решение, помеченное как лучшее (EX:),psexec \\target -u domain\username -p password cmd /c "echo . | powershell c:\path\script.ps1"
работало для меня только во время каждого третьего или около того запуска. Я продолжал копать, и я нашел описание каждого переключателяЯ решил попробовать "-s", и это то, что работало на меня каждый раз. Вот мой пример:
источник