在Powershell中定时执行命令行

时间:2015-11-30 04:34:27

标签: powershell

我正在构建一个PS程序来执行几个java程序。某些程序可能会占用我想要允许的最长时间。如果发生这种情况,我想停止执行它们并继续前进。到目前为止,我已经用过这个:

$j = Start-Job -ScriptBlock {java -jar .\Tournament.jar Students.csv 7777}
Wait-Job $j -Timeout 10 | out-null
if($j.State -eq "Completed"){ "Done!" } 
elseif($j.State -eq "Running"){"Program took longer than the max limit."}
Remove-Job -force $j

似乎无法识别jar文件仍在运行,因为它将“已完成”条件标记为true。 jar文件至少需要70秒才能执行。此外,它似乎确实关闭了jar执行,因为jar永远不会创建它的输出文件。

2015年11月30日更新

用这个代替上面的代码,似乎有效:

$p = Start-Process java -ArgumentList '-jar', '.\Tournament.jar', 'Students.csv', '7777' -RedirectStandardError '.\console.err' -NoNewWindow -passthru
if(! $p.WaitForExit(10000)){
    "Program took longer than max time"
    $p.kill()
}

任何其他意见将不胜感激。

0 个答案:

没有答案