2017-04-17 24 views
4

タスクスケジューラから開始されたPowerShellスクリプトを使用してバックグラウンドで実行する一連のSASプログラムがあります。PowerShell 4スクリプトのバックグラウンドジョブの制御

各プログラムが最初に終了してから、もう一方を開始したいと思います。

私はこのサイトで見つかった例を使用してさまざまなアプローチを試しましたが、うまくいかないようです。私が特に見つけることができないのは、バックグラウンドで実行されているジョブの状態です。次に、条件ステートメントでその状態を使用して、バックグラウンドで実行されている最初のプログラムが完了してから2番目のプログラムを開始することを確認します。例えば

、私が使用している場合:その後、

$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 

私はSASプログラム自体が完了するまでに約10分を要したときに$job01は、右Get-Jobを発行した後に完了していることがわかります。

バックグラウンドで実行されているSASプログラムが完了したタイミングを特定するために使用できるコマンドレットは何ですか?

+0

編集のおかげで、アレックス。 – 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 

引数文字列内で二重引用符(バックティックを使用)をエスケープすることを忘れないでください。

+0

しかし、私はジョブラッパーを削除します。営業担当者は、現在のジョブが完了した後にのみ次のジョブを開始したいので、最初にジョブを使用することにはあまり意味がありません。 –

+0

良い点。あまりにも速く読んでください。彼はジョブのスクリプトブロック内で複数のプロセスを意味すると考えました。 :-) –

+0

Frode、ありがとうございました。 Ansgar、「ジョブラッパーを削除する」とはどういう意味ですか?それを行う方法については明確ではありません。 – ljl

関連する問題