powershell 스크립트를 성공적으로 실행 한 후 PsExec이 중단되는 이유는 무엇입니까? 단순히 Windows 서비스를

스크립트는 매우 간단합니다. 단순히 Windows 서비스를 시작하려고합니다. 대상 컴퓨터에서 실행하면 로컬에서 제대로 작동합니다. 스크립트는 PsExec을 통해 수행 될 때 실제로 잘 실행되며 CMD 프롬프트에서 “enter”키를 누르기 전까지는 반환되지 않습니다. 이것은 TeamCity에서 호출되기 때문에 문제이며, PsExec이 돌아 오기를 기다리는 동안 에이전트를 정지시킵니다.

나는 다음을 시도했다.

  • Powershell 스크립트 끝에 exit및 추가하기exit 0
  • 이 SF 질문< NUL 의 답변에 따라 PsExec 호출 끝에 a 추가
  • >stdout 리디렉션 추가

이것이 실제로 psexec를 호출하는 방법입니다.

psexec \\target -u domain\username -p password powershell c:\path\script.ps1

내가 무엇을하든 cmd 프롬프트에서 로컬로 할 때까지 중단됩니다. Enter 키를 누르면 메시지가 나타납니다.

powershell exited on target with error code 0.


답변

이것이 일반적인 문제임이 밝혀졌습니다. 여기서 해결책을 찾았습니다 . 기본적으로 cmd를 사용하여 stdin의 일부 데이터를 파이프하면 실행 후 (powershell이 ​​아닌 cmd를 통해 실행되기 때문에) 제대로 반환됩니다.

예:

psexec \\target -u domain\username -p password cmd /c "echo . | powershell c:\path\script.ps1"

답변

답변이 이미 늦어 질 것이라는 것을 알고 있습니다. 그렇지 않다면 향후 방문자에게 유용 할 것입니다.

STDIN은 정지 상태에서 올 수 있으려면 powershell 실행에서 방향을 재지 정해야합니다 (STDIN에서 대기). 이 작업을 수행 할 수 있도록 -inputformat none

powershell -inputformat none -File powershell_script.ps1 작동합니다.

확인-https: //connect.microsoft.com/PowerShell/feedback/details/572313/powershell-exe-can-hang-if-stdin-is-redirected


답변

psexec \\target -u domain\username -p password -d powershell c:\path\script.ps1

또한 문제를 해결하십시오.

-dpsexec플래그 는 비 대화식 방식으로 “run and exit”와 같습니다.

-d 응용 프로그램이 종료 될 때까지 기다리지 않습니다.

비대화 형 응용 프로그램에만 사용하십시오.


답변

Powershell이 ​​종료되지 않습니다. 이 명령 줄을 사용해보십시오

Powershell -command script.ps1

답변

psexecVBS 스크립트를 사용하여 실행 중이 었으며 최고 (EX :)로 표시된 솔루션은 psexec \\target -u domain\username -p password cmd /c "echo . | powershell c:\path\script.ps1"각 3 회 정도 동안 만 작동했습니다. 계속 파고 있었고 각 스위치에 대한 설명을 찾았습니다.

나는 “-s”를 시도하기로 결정했고 매번 나를 위해 일한 것은 다음과 같습니다.

call C:\psexec.exe %SERVER_NAME% -u %USERNAME% -p %PASSWORD% -h -s cscript %pathTomyVBSscript%