在PowerShell 4脚本中控制后台作业

4

我有一系列的SAS程序,我使用由任务计划程序发起的PowerShell脚本在后台运行。

我希望每个程序在开始之前都能先完成。

我尝试了许多不同的方法,使用了我在这个网站上找到的示例,但没有一个看起来可行。我具体找不到正在后台运行的作业状态,并在条件语句中使用该状态来检查第一个程序是否已经完成,然后再启动第二个程序。

例如,如果我使用:

$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

在发出Get-Job命令后,我希望您能确保$job01已完成,而SAS程序本身需要约10分钟才能完成。

有哪些cmdlet可以用来确定在后台运行的SAS程序何时完成?


感谢你的编辑,Alex。 - ljl
1个回答

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

记得在参数字符串内部转义双引号(使用反引号)。


我会移除作业包装器。因为原帖想要在当前作业完成后才开始下一个作业,所以使用作业本身并没有太大意义。 - Ansgar Wiechers
好的观点。阅读得太快了。本以为他的意思是作业脚本块内有多个进程。 :-) - Frode F.
Frode,非常感谢您的回复。Ansgar,您所说的“删除作业包装器”是什么意思?不清楚如何操作。 - ljl
我已经在答案中完成了它(删除了 Start-Job -ScriptBlock { #keep this } 部分)。 - Frode F.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接