1

クラッシュ、自己終了、またはシステムの再起動後など、何らかの理由で停止したときに再起動する必要があるPowerShellスクリプトがあります...

バットまたは別のpowershellスクリプトから、実行されていない場合に再び開始されるようにするにはどうすればよいですか...

つまり、別のスクリプトから既に実行されているかどうかを確認するにはどうすればよいですか?

特定のエラーで終了しない限り、1 つの PowerShell スクリプトをアクティブなスクリプトで開始し、単純に新しい開始をループさせることができることはわかっています...しかし、そのスクリプトは :D に表示される必要があります。元の質問ですが、そのスクリプトを 24 時間 365 日実行し続けるにはどうすればよいですか?

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)
4

1 に答える 1

4

スケジュールされたタスクを使用するだけです。やりたいことを実行するのに役立つオプションがたくさんあります。スクリプトを 5 分ごとに実行し、その時間を費やして終了するのに十分なループを実行させることができます。

$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..
}
于 2012-07-31T13:21:46.320 に答える