2017-04-17 6 views
4

작업 스케줄러에서 시작된 PowerShell 스크립트를 사용하여 백그라운드에서 실행되는 일련의 SAS 프로그램이 있습니다.PowerShell 4 스크립트에서 백그라운드 작업 제어

각 프로그램이 다른 프로그램을 시작하기 전에 먼저 완료하고 싶습니다.

나는이 사이트에서 찾은 예제를 사용하여 여러 가지 접근법을 시도했지만 아무 것도 작동하지 않습니다. 제가 구체적으로 찾을 수없는 것은 백그라운드에서 실행되는 작업의 상태입니다. 그런 다음 조건문에서 해당 상태를 사용하여 백그라운드에서 실행되는 첫 번째 프로그램이 두 번째 프로그램을 시작하기 전에 완료되었는지 확인합니다. 예를 들어

, 내가 사용하는 경우 :

$job01 = Start-Job -ScriptBlock { & "C:\Program Files\SASHome\SASFoundation\9.4\sas.exe" -sysin "D:\EDM\SASPROGRAMS\ABC.sas" -nosplash -log D:\EDM\SASLOGS -work D:\SASWork } 

다음

Get-Job 

내가 $job01이 완료되는 것을 볼 수 있습니다 오른쪽 SAS 프로그램 자체는 완료하는 데 약 10 분 소요 Get-Job를 실행 한 후 .

백그라운드에서 실행중인 SAS 프로그램이 완료된시기를 결정하는 데 사용할 수있는 cmdlet은 무엇입니까?

+0

편집 해 주셔서 감사합니다. Alex. – ljl

답변

5

호출 연산자 &이 발생하고 잊어 버립니다. -Wait 스위치가있는 Start-Process을 시도하십시오. 시도 :

Start-Process -FilePath "C:\Program Files\SASHome\SASFoundation\9.4\sas.exe" -ArgumentList "-sysin `"D:\EDM\SASPROGRAMS\ABC.sas`" -nosplash -log D:\EDM\SASLOGS -work D:\SASWork" -NoNewWindow 

하면 인수 문자열 내부의 (a 역 따옴표를 사용하여) 쌍 따옴표를 탈출해야합니다.

+0

그래도 작업 래퍼를 ​​제거합니다. 이후 OP는 현재 작업이 완료된 후에 만 ​​다음 작업을 시작하기를 원하기 때문에 처음에는 작업을 사용하는 것이별로 중요하지 않습니다. –

+0

좋은 지적. 너무 빨리 읽으십시오. 그는 그 일의 스크립트 블록 안에서 여러 프로세스를 의미한다고 생각했습니다. :-) –

+0

Frode, 대단히 감사합니다. Ansgar, "작업 래퍼 제거"는 무엇을 의미합니까? 그것을하는 방법에 명확하지 않습니다. – ljl