2017-04-17 27 views
4

我有一系列SAS程序,我使用从Task Scheduler启动的PowerShell脚本在后台运行。控制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是完成发行Get-Job,当SAS程序本身需要大约10分钟才能完成之后。

可以使用什么cmdlet来确定在后台运行的SAS程序何时完成?

+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 

请记住在arguments-string内部使用双引号(使用反引号)。

+0

虽然我会删除作业包装。由于OP想要在完成当前任务之后才开始下一个任务,因此首先使用任务没有多大意义。 –

+0

好点。阅读太快。以为他的意思是在作业的scriptblock内部有多个进程。 :-) –

+0

Frode,非常感谢您的回复。 Ansgar,你是什么意思的“删除工作包装”?不清楚如何做到这一点。 – ljl

相关问题