如何使powershell脚本全天候运行

时间:2012-07-31 12:42:58

标签: powershell

我有一个PowerShell脚本,当它因任何原因死亡时需要重新启动,无论是崩溃,自我退出还是在系统重启后......

如何从bat或其他PowerShell脚本中看到,如果它没有运行,它将再次启动...

即。如何判断它是否已经从另一个脚本运行?

我知道我可以让一个powershell脚本启动活动的脚本,只要它没有以特定错误退出就让它循环一个新的开始...但是那时脚本需要被看到:D所以我们是回到最初的问题,如何让脚本全天候运行?

do 
{
  $date = Get-Date -format "yyyy-MM-ddTHH:mm:ss"
  "$($date) Repeat : Restarting Worker, LastExitCode $($LastExitCode)." | Out-File D:\IDM\Worker\Worker.LOG -width 180 -append
  powershell -File "D:\IDM\Scripts\Worker.ps1"
  sleep 10
} 
while ($LastExitCode -ne $null)

1 个答案:

答案 0 :(得分:4)

我只会使用预定任务。有很多选项可以帮助你做你想做的事。您可以每五分钟运行一次脚本并让它做足够的循环来占用该时间并退出:

$now = Get-Date
while ($now.AddMinutes(5) -lt (Get-Date)){
    ...work...
}

或者你甚至可以在每次循环工作时写一个标志文件并让任何新进程检查该文件以查看它是否没有活动。如果没有活动:

$workFlag = Get-Item C:\work.flg
$cutOff = (Get-Date).AddMinutes(-5)
if ($workFlag.LastWriteTime -gt $cutOff){
    New-Item -force -path C:\work.flg
    ...work loop..
}