El guión es bastante sencillo. Simplemente intenta iniciar un montón de servicios de Windows. La ejecución localmente funciona bien cuando está en la máquina de destino. El script también se está ejecutando bien cuando se realiza a través de PsExec, simplemente nunca regresa hasta que presiono la tecla "enter" en mi indicador CMD. Esto es un problema, porque se está llamando desde TeamCity y hace que el Agente se cuelgue esperando que PsExec regrese.
He intentado lo siguiente:
- Agregar un
exit
yexit 0
al final del script Powershell - Agregar
< NUL
a al final de la llamada PsExec, según la respuesta en esta pregunta de SF - Agregar una
>
redirección stdout
Así es como en realidad estoy llamando psexec:
psexec \\target -u domain\username -p password powershell c:\path\script.ps1
No importa lo que haga, se bloquea hasta que localmente en el indicador de cmd. Después de presionar enter, recibo el mensaje:
powershell exited on target with error code 0.
fuente
Sé que la respuesta llega tarde, ya se habría resuelto, de lo contrario, podría ser útil para futuros visitantes.
STDIN tiene que ser redirigido en orden de ejecución de PowerShell para poder venir de Hang (Aquí espera en STDIN). para poder hacer esto use -inputformat none
powershell -inputformat none -File powershell_script.ps1
trabajará.Verificación: https://connect.microsoft.com/PowerShell/feedback/details/572313/powershell-exe-can-hang-if-stdin-is-redirected
fuente
También soluciona el problema.
La
-d
bandera para psexec es como "ejecutar y salir" de una manera no interactiva:fuente
Powershell no está saliendo. Prueba esta línea de comando
fuente
Estaba ejecutando
psexec
con el script VBS y la solución marcada como la mejor (EX:)psexec \\target -u domain\username -p password cmd /c "echo . | powershell c:\path\script.ps1"
funcionaba para mí solo durante cada 3ª ejecución. Seguí cavando y encontré la descripción de cada interruptorDecidí probar "-s" y eso fue lo que funcionó para mí cada vez. Aquí está mi ejemplo:
fuente