O script é bastante direto. Simplesmente tenta iniciar um monte de serviços do Windows. A execução localmente funciona bem quando está na máquina de destino. Na verdade, o script também está executando bem quando feito via PsExec, mas nunca retorna até que eu pressione a tecla "enter" no prompt do meu CMD. Isso é um problema, porque está sendo chamado pelo TeamCity e faz com que o Agente espere aguardando o retorno do PsExec.
Eu tentei o seguinte:
- Adicionando
exit
eexit 0
no final do script Powershell - Adicionando
< NUL
a ao final da chamada PsExec, de acordo com a resposta nesta pergunta do SF - Adicionando um
>
redirecionamento stdout
É assim que estou chamando psexec:
psexec \\target -u domain\username -p password powershell c:\path\script.ps1
Não importa o que eu faça, ele trava até que eu localmente no prompt do cmd. Depois de pressionar enter, recebo a mensagem:
powershell exited on target with error code 0.
fonte
Sei que a resposta chega tarde, já teria sido descoberto. Caso contrário, pode ser útil para futuros visitantes.
O STDIN deve ser redirecionado na execução do PowerShell para poder sair do modo de espera (Aqui espera no STDIN). para poder fazer isso, use -inputformat none
powershell -inputformat none -File powershell_script.ps1
vai funcionar.Verifique - https://connect.microsoft.com/PowerShell/feedback/details/572313/powershell-exe-can-hang-if-stdin-is-redirected
fonte
Também corrige o problema.
O
-d
sinalizador para psexec é como "executar e sair" de uma maneira não interativa:fonte
O PowerShell não está saindo. Experimente esta linha de comando
fonte
Eu estava executando o
psexec
script VBS e a solução marcada como a melhor (EX:)psexec \\target -u domain\username -p password cmd /c "echo . | powershell c:\path\script.ps1"
estava funcionando para mim apenas a cada 3ª execução. Eu continuava cavando e encontrei a descrição de cada chaveEu decidi tentar "-s" e que o que funcionou para mim todas as vezes Aqui está o meu exemplo:
fonte