转换为EXE后,在某些条件下重新执行powershell脚本

转换为EXE后,在某些条件下重新执行powershell脚本,powershell,Powershell,我有一个脚本,我转换为EXE,所以我可以运行它作为一个服务。我试图让脚本在某种条件下再次执行。我在脚本中有一个for循环,我想中断并重新执行,因此它类似于: foreach{ 如果(获取日期-格式为“yyyyMMdd”!=当前日期){ **重新执行脚本** } 发送电子邮件(美元) } 将代码包装到函数中,如果调用此函数,则在中调用此函数。有几种方法可以做到这一点 您可以创建一个函数,并直接调用它: function myFunction($myCollection) foreach{ i

我有一个脚本,我转换为EXE,所以我可以运行它作为一个服务。我试图让脚本在某种条件下再次执行。我在脚本中有一个for循环,我想中断并重新执行,因此它类似于:

foreach{
如果(获取日期-格式为“yyyyMMdd”!=当前日期){
**重新执行脚本**
}
发送电子邮件(美元)
}

将代码包装到函数中,如果
调用此函数,则在
中调用此函数。

有几种方法可以做到这一点

您可以创建一个函数,并直接调用它:

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

如果你想把它作为一个服务来运行,你需要一些方法来限制脚本检查日期的频率,否则它会占用大量的CPU

有几种方法可以做到这一点。您可以在此处选择其他答案,并在for/while循环中添加具有适当时间的Start-Sleep cmdlet

但是我想你可能有理由重新运行你的EXE。其他答案不会重新运行EXE,他们只会保持EXE运行,直到日期到来

如果确实要重新运行EXE,只需输入EXE的命令行,其中包含**重新执行脚本**。您不需要for循环,但您确实需要调用Start Sleep来实现一些合理的功能