스크립트는 매우 간단합니다. 단순히 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
작동합니다.
답변
psexec \\target -u domain\username -p password -d powershell c:\path\script.ps1
또한 문제를 해결하십시오.
-d
psexec 의 플래그 는 비 대화식 방식으로 “run and exit”와 같습니다.
-d 응용 프로그램이 종료 될 때까지 기다리지 않습니다.
비대화 형 응용 프로그램에만 사용하십시오.
답변
Powershell이 종료되지 않습니다. 이 명령 줄을 사용해보십시오
Powershell -command script.ps1
답변
psexec
VBS 스크립트를 사용하여 실행 중이 었으며 최고 (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%