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

时间:2013-07-01 19:01:53

标签: powershell

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

foreach{
   if(Get-Date -format "yyyyMMdd" != $CURRENTDATE){
          **re-execute script**
   }
   send_email($_)
}

3 个答案:

答案 0 :(得分:0)

将代码包装到函数中并在if中调用此函数。

答案 1 :(得分:0)

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

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

function myFunction($myCollection)
foreach{
   if(Get-Date -format "yyyyMMdd" != $CURRENTDATE){
          myFunction $myCollection)
   }
   send_email($_)
}

有关使用函数can be found here的更多信息(与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

答案 2 :(得分:0)

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

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

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

如果您想重新运行EXE,只需输入EXE的命令行,即可重新执行脚本**。您不需要for循环,但您需要将Start-Sleep调用到合理的范围。