我有一个转换为 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($_)
}
将您的代码包装到函数中并if
调用此函数。
如果你想把它作为服务运行,你需要一些方法来限制脚本检查日期的频率,否则它会使用大量的 CPU!
有几种方法可以做到这一点。您可以在此处获取其他答案,并在 for/while 循环中添加适当时间的 Start-Sleep cmdlet。
但是我认为您可能有理由重新运行您的 EXE。其他答案不会重新运行 EXE,他们只会让 EXE 一直运行,直到日期到来。
如果您确实想重新运行您的 EXE,您只需输入具有 **re-execute script** 的 EXE 命令行。您不需要 for 循环,但您确实需要调用 Start-Sleep 到一些合理的地方。
有几种方法可以做到这一点。
您可以制作一个函数,然后直接调用它:
function myFunction($myCollection)
foreach{
if(Get-Date -format "yyyyMMdd" != $CURRENTDATE){
myFunction $myCollection)
}
send_email($_)
}
可以在此处找到有关使用函数的更多信息(与 C 语法相比,它们是奇怪的东西)
可能是最佳路线。
另一条路线是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