문제

올바른 순서로 상호 의존적인 창 응용 프로그램을 시작하는 데 사용되는 DOS 스타일 .cmd 파일을 상상해 보십시오.

예:
1) 매개변수가 포함된 exe를 호출하여 서버 애플리케이션을 시작합니다.
2) 서버가 초기화될 때까지(또는 일정 시간 동안) 기다립니다.
3) 매개변수가 포함된 exe를 호출하여 클라이언트 애플리케이션을 시작합니다.

PowerShell에서 이러한 종류의 일괄 작업을 수행하는 가장 간단한 방법은 무엇입니까?

도움이 되었습니까?

해결책

PowerShell은 .Net 개체에 액세스할 수 있다는 점을 기억하세요.에서 제안한 Start-Sleep 블레어 콘래드 전화로 대체 가능 입력 대기유휴 클라이언트를 시작하기 전에 서버가 언제 준비되었는지 알 수 있도록 서버 프로세스에 대한 정보를 제공합니다.

$sp = get-process server-application
$sp.WaitForInputIdle()

당신은 또한 사용할 수 있습니다 프로세스.시작 프로세스를 시작하고 정확한 프로세스를 반환하도록 합니다.그러면 get-process가 필요하지 않습니다.

$sp = [diagnostics.process]::start("server-application", "params")
$sp.WaitForInputIdle()
$cp = [diagnostics.process]::start("client-application", "params")

다른 팁

@Lars Truijens가 제안했습니다.

PowerShell은 .NET 객체에 액세스 할 수 있습니다.Blair Conrad가 제안한 START-SLEEP는 서버 프로세스의 WaitForInputIdle로 호출하여 클라이언트를 시작하기 전에 서버가 언제 준비되었는지 알 수 있습니다.

이는 고정된(또는 매개변수를 통해 제공되는) 시간 동안 잠자는 것보다 더 우아합니다.하지만,입력 대기유휴

사용자 인터페이스가있는 프로세스에만 적용되므로 메시지 루프가 적용됩니다.

따라서 launch-server-application의 특성에 따라 동작하지 않을 수 있습니다.그러나 Lars가 나에게 지적했듯이 그 질문은 창문이 있는 응용 프로그램(질문을 읽을 때 놓쳤음)이므로 그의 솔루션이 아마도 가장 좋을 것입니다.

애플리케이션 실행 사이에 10초를 기다리려면 다음을 시도하십시오.

launch-server-application serverparam1 serverparam2 ...
Start-Sleep -s 10
launch-client-application clientparam1 clientparam2 clientparam3 ...

스크립트를 생성하고 인수를 전달하려면 다음 내용으로 runlinkedapps.ps1(또는 무엇이든)이라는 파일을 생성하십시오.

launch-server-application $args[0] $args[1]
Start-Sleep -s 10
launch-client-application $args[2] $args[3] $args[4]

또는 runlinkedapps.ps1을 실행하는 데 사용하는 라인에 서버 및 클라이언트 매개 변수를 배포하도록 선택합니다.원하는 경우 하드코딩 대신 여기에 지연을 전달할 수도 있습니다. 10.

.ps1 파일은 경로에 있어야 합니다. 그렇지 않으면 파일을 실행할 때 해당 위치를 지정해야 합니다.(아, 그리고 launch-server-application과 launch-client-application이 경로에 있다고 가정했습니다. 그렇지 않은 경우 전체 경로도 지정해야 합니다.)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top