サービスとして実行できるように、EXE に変換したスクリプトがあります。何らかの条件でスクリプトを再度実行しようとしています。スクリプトに for ループがあり、中断して再実行したいので、次のようになります。
foreach{
if(Get-Date -format "yyyyMMdd" != $CURRENTDATE){
**re-execute script**
}
send_email($_)
}
サービスとして実行できるように、EXE に変換したスクリプトがあります。何らかの条件でスクリプトを再度実行しようとしています。スクリプトに for ループがあり、中断して再実行したいので、次のようになります。
foreach{
if(Get-Date -format "yyyyMMdd" != $CURRENTDATE){
**re-execute script**
}
send_email($_)
}
これをサービスとして実行する場合は、スクリプトが日付をチェックする頻度を制限する何らかの方法が必要です。そうしないと、多くの CPU が使用されます!
これを行うにはいくつかの方法があります。ここで他の回答を使用して、for/while ループに適切な時間を指定して Start-Sleep コマンドレットを追加できます。
ただし、EXE を再実行する理由があるのではないかと考えています。他の回答はEXEを再実行せず、日付が変わるまでEXEを実行し続けるだけです。
EXE を再実行したい場合は、**re-execute script** がある EXE のコマンド ラインを入力するだけです。for ループは必要ありませんが、適切な方法で Start-Sleep を呼び出す必要があります。
コードを関数にラップし、if
この関数を呼び出します。
これを行うにはいくつかの方法があります。
関数を作成して直接呼び出すことができます。
function myFunction($myCollection)
foreach{
if(Get-Date -format "yyyyMMdd" != $CURRENTDATE){
myFunction $myCollection)
}
send_email($_)
}
関数の使用に関する詳細情報は、ここにあります(C 構文に比べて奇妙なものです)。
おそらく最適なルートでしょう。
もう 1 つのルートは while ループです。
while(Get-Date -format "yyyyMMdd" != $CURRENTDATE)
{
foreach{
#Iterate foreach here, then exits to loop, where it checks condition again
#If still does not match todays date, it goes through foreach loop again.
}
} #loop
send_email($_) #Script will not get here until it meets your date check condition