【问题标题】:Controlling background jobs in PowerShell 4 scripts在 PowerShell 4 脚本中控制后台作业
【发布时间】:2017-04-17 20:30:37
【问题描述】:

我有一系列 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

我会看到 $job01 在发出 Get-Job 后立即完成,此时 SAS 程序本身需要大约 10 分钟才能完成。

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

【问题讨论】:

  • 感谢您的编辑,亚历克斯。

标签: powershell sas background-process


【解决方案1】:

呼叫操作员& 触发并忘记了。使用-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

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

【讨论】:

  • 不过,我会删除作业包装器。由于 OP 只想在当前作业完成后才开始下一个作业,因此首先使用作业没有多大意义。
  • 好点。读得太快了。以为他的意思是作业脚本块中的多个进程。 :-)
  • Frode,非常感谢您的回复。 Ansgar,“删除工作包装”是什么意思?不清楚如何做到这一点。
  • 我已经在答案中做到了(删除了Start-Job -ScriptBlock { #keep this }部分)
猜你喜欢
  • 2021-11-16
  • 1970-01-01
  • 2021-09-09
  • 2018-09-08
  • 2017-03-29
  • 1970-01-01
  • 2013-08-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多