2010-03-11 47 views
7

Me gustaría utilizar un script de Windows PowerShell para ejecutar un archivo por lotes cada x número de segundos. Por lo tanto, es el mismo archivo por lotes que se ejecuta una y otra vez.Ejecutar un archivo por lotes cada x número de segundos con PowerShell

He hecho algunas búsquedas, pero no puedo encontrar lo que estoy buscando. Es por algo que quiero ejecutar en una máquina con Windows   XP. He usado Windows Scheduler muchas veces para algo similar, pero por alguna razón Windows Scheduler solo se ejecuta una vez ... Entonces no más. Tampoco quiero que el archivo por lotes se llame a sí mismo, porque se producirá un error después de que se ejecute tantas veces.

Respuesta

13

sólo hay que poner la llamada al archivo por lotes en un bucle while por ejemplo:

$period = [timespan]::FromSeconds(45) 
$lastRunTime = [DateTime]::MinValue 
while (1) 
{ 
    # If the next period isn't here yet, sleep so we don't consume CPU 
    while ((Get-Date) - $lastRunTime -lt $period) { 
     Start-Sleep -Milliseconds 500 
    } 
    $lastRunTime = Get-Date 
    # Call your batch file here 
} 
+0

gran ... gracias por la ayuda rápida .. funciona muy bien – jvcoach23

+5

Keith, ¿por qué no sólo 'while (1) {sueño -sec 45; . \ script.ps1} '? – stej

+3

Eso depende de si el objetivo es ejecutar literalmente siempre 'x' segundos (suponiendo que el archivo por lotes tarda menos de' x' segundos para ejecutar) O si se va a ejecutar digamos 20 segundos una vez, dormir 25, ejecutar un segundo tiempo y tomar 30 segundos y luego dormir 25. Entonces el período de tiempo varía (45 - 55 segundos). Si eso no importa, simplifíquelo a un sueño simple. –

Cuestiones relacionadas