Monday 5 February 2018

시작 프로세스 powershell waitforexit


시작 프로세스 powershell waitforexit
App Store를 통해 가져 오기 우리의 응용 프로그램 에서이 게시물을 읽으십시오!
Powershell 시작 프로세스 - 원격 스크립트 블록에서 매개 변수 대기가 실패합니다.
그래서 여기에 내가하려는 일의 샘플이있다.
그것은 다른 기계에 잘 연결하고, 벌금 과정을 시작합니다. 문제는 계속 진행하기 전에 프로세스가 완료 될 때까지 기다리지 않는다는 것입니다. 이로 인해 문제가 발생합니다. 어떤 아이디어?
빠른 편집 : 왜 프로세스를 원격으로 실행할 때 - Wait 매개 변수가 실패합니까?
이 문제는 PowerShell 버전 3에서 발생하지만 버전 2에서는 작동하지 않습니다.
Powershell 3에서. WaitForExit ()은 나를 위해 속임수를 사용합니다.
그냥 시작 - 절전. HasExited -.ExitCode 설정하지 않고 일반적으로. exe 완료 방법을 알면 좋습니다.
이전에이 문제를 겪었고 IIRC는 다음과 같은 해결 방법을 제시했습니다.
System. Diagnostics. Process 클래스를 사용하여이 문제를 해결할 수도 있습니다. 출력물에 신경 쓰지 않는다면 다음과 같이하면됩니다 :
당신이 돌보는 경우 다음과 비슷한 것을 할 수 있습니다 :
이렇게하면 프로세스가 완료 될 때까지 기다린 다음 표준 출력 스트림을 반환합니다.

시작 프로세스 powershell waitforexit
App Store를 통해 가져 오기 우리의 응용 프로그램 에서이 게시물을 읽으십시오!
Powershell에서 start-process 및 - wait 명령 사용.
나는 Powershell을 처음 사용하고 프로그래밍 배경을 많이 갖고 있지 않으며 단지 소프트웨어 패키지로 사용하려고합니다. 어쨌든 - Wait 매개 변수를 사용하여 start-process 명령에 대해 알아 냈으며 대부분의 경우 잘 작동합니다. 비록 내가 주목 한 것은 당신이 지정한 프로세스를 기다릴뿐만 아니라 메인 프로세스가 더 이상 실행되지 않아도 모든 하위 프로세스를 기다리는 것입니다. 보통 이것은 좋지만 이상한 상황이 있습니다. start-process를 사용하여 복잡한 Oracle 배치 파일을 실행하고 있습니다. 배치 파일은 결국 실제로 기다리고 싶은 setup. exe를 실행하지만 다른 프로세스도 멈추지 않습니다. 따라서 - wait 매개 변수를 사용하면 setup. exe가 더 이상 실행되지 않아도 스크립트가 중지되지 않습니다. 가장 가까운 내가 찾은이 사용하고 있습니다 :
이 작동하지만 시간 초과 명령을 사용하지 않고도 더 좋은 방법이 있다고 생각합니다. 어떤 아이디어?

시작 프로세스 powershell waitforexit
App Store를 통해 가져 오기 우리의 응용 프로그램 에서이 게시물을 읽으십시오!
-Wait 대신 Start-Process 및 WaitForExit을 사용하여 ExitCode를 얻습니다.
PowerShell에서 프로그램을 실행하고 Exit를 기다린 다음 ExitCode에 액세스 할 수 있지만 많은 행운이 없습니다. 나는 백그라운드에서 계속할 수있는 처리가 필요하기 때문에 Start-Process와 함께 사용하고 싶지 않다.
다음은 간단한 테스트 스크립트입니다.
이 스크립트를 실행하면 메모장이 시작됩니다. 이 작업을 수동으로 닫으면 종료 코드가 인쇄되고 - wait를 사용하지 않고 다시 시작됩니다. 이것이 종료되면 ExitCode가 제공되지 않습니다.
프로그램 시작과 종료를 기다리는 사이에 추가 처리를 수행 할 수 있어야하므로 - Wait을 사용할 수 없습니다. 어떤 방법으로이 작업을 수행 할 수 있으며 여전히이 프로세스에서. ExitCode 속성에 액세스 할 수 있습니까?
네가 할 수있는 두 가지 일은 내가 생각하기에.
System. Diagnostics. Process 개체를 수동으로 만들고 시작 프로세스를 건너 뜁니다. 백그라운드 작업에서 실행 파일을 실행합니다 (비 대화식 프로세스에만 해당).
다음 중 하나를 수행하는 방법은 다음과 같습니다.
여기서 기억해야 할 두 가지가 있습니다. 하나는 - PassThru 인수를 추가하는 것이고 두 가지는 - Wait 인수를 추가하는 것입니다. 이 결함으로 인해 wait 인수를 추가해야합니다. connect. microsoft / PowerShell /feedback/details/520554/start-process-does-not-return-exitcode-property.
이렇게하면 프로세스 객체가 다시 전달되고 해당 객체의 ExitCode 속성을 볼 수 있습니다. 다음은 그 예입니다.
-PassThru 또는 - Wait없이 실행하면 아무 것도 출력하지 않습니다.
위의 마지막 제안을 시도하면서 더 간단한 해결책을 발견했습니다. 내가해야만하는 것은 프로세스 핸들을 캐시하는 것이었다. 내가 그렇게하자마자, $ process. ExitCode가 올바르게 작동했습니다. 프로세스 핸들을 캐시하지 않으면 $ process. ExitCode가 null입니다.
또는 이것을 추가하십시오.
이 코드를 사용하면 System. Diagnostics. Process. Start ()를 직접 사용하여 수행 할 수없는 리디렉션 된 출력 / 오류 스트림을 PowerShell에서 처리하도록 할 수 있습니다.
내 과정이 끝났음에도 불구하고 '- 잠깐'옵션이 저를 막는 것처럼 보였습니다.
나는 Adrian의 솔루션을 시도하고 그것을 작동합니다. 하지만 프로세스 핸들을 가져 오는 부작용에 의존하는 대신 Wait-Process를 사용했습니다.

시작 프로세스 powershell waitforexit
App Store를 통해 가져 오기 우리의 응용 프로그램 에서이 게시물을 읽으십시오!
powershell을 사용하여 프로세스가 종료 될 때까지 기다립니다.
나는 F # (C #과 비슷한)에서 이름으로 프로세스를 얻은 다음, 특정 프로세스를 경로로 필터링하고 종료 할 때까지 기다리는 작은 프로그램을 가졌다.
그러나이 코드는 로컬 컴퓨터에서만 작동합니다. 이제 원격 컴퓨터에서 동일한 기능을 사용하고 싶습니다.
그래서 저는 PowerShell을 선택했습니다 (저는 완전히 새로운 것입니다).
그것의 경로로 프로세스를 필터링하고 powershell에서 한 줄을 사용하여 프로세스가 종료 될 때까지 기다릴 수 있습니까? 그렇지 않다면 더 긴 해결책을 제공 할 수 있습니까?
원격 컴퓨터에서이 줄을 어떻게 실행 시킬지 나는 이미 생각이있다. 내가 필요한 건 그저 마술적인 선일 뿐이야.
편집 : 로컬 컴퓨터에서 원격 컴퓨터에서 실행되는 msdeploy를 사용하여 전달하기 때문에 사실이 줄은 로컬 컴퓨터에서 작동해야합니다.
Powershell을 가지고 노는 시간을 보내고 마침내 내가 원하는 것을 얻었습니다.

No comments:

Post a Comment