2012-10-07 18 views
5

Powershell v3 viene con todos estos nuevos cmdlets de programación de trabajos. Se ven geniales, pero tengo problemas para crear un disparador específico. Necesito ejecutar un trabajo todos los días, repitiéndome cada hora, durante un intervalo específico.Powershell v3 New-JobTrigger diariamente con repetición

El uso de la IU de la Tarea-Programador es sencillo, pero no puedo abrirme camino en el cmdlet New-JobTrigger.

Si utilizo el diario parámetro-set, no tengo la opción de repetición:

New-JobTrigger [-Daily] -At <DateTime> [-DaysInterval <Int32> ] [-RandomDelay <TimeSpan> ] [ <CommonParameters>] 

Si utilizo el parámetro-Una vez establecido, no puede tener la opción Diario

New-JobTrigger [-Once] -At <DateTime> [-RandomDelay <TimeSpan> ] [-RepetitionDuration <TimeSpan> ] [-RepetitionInterval <TimeSpan> ] [ <CommonParameters>] 

Lo que necesito, pero obviamente no funciona, es una mezcla entre los dos. Por ejemplo:

New-JobTrigger -Daily -At xxxx -RepetitionDuration (New-TimeSpan -Hours 5) -RepetitionInterval (New-TimeSpan -Hours 1) 

¿Es posible? ¿Tal vez mezcla varios factores desencadenantes para el mismo trabajo?

Respuesta

6

Esto funciona para mí:

Nota - Sé que la pregunta original estaba relacionado con Nueva-JobTrigger La intención era proporcionar una posible solución que puede ser traducible a Nueva JobTrigger así dado el tema se aplica a ambos.

$A = New-ScheduledTaskAction -execute "powershell" -argument "-nologo -noprofile -noninteractive C:\MyScript.ps1" 
$T = New-ScheduledTaskTrigger -Once -At 03:00AM 
Register-ScheduledTask -TaskName StartBasicServices_Local -Trigger $T -Action $A -description "MyScript" -User "NT AUTHORITY\SYSTEM" -RunLevel 1  
$T.RepetitionInterval = (New-TimeSpan -Minutes 5) 
$T.RepetitionDuration = (New-TimeSpan -Days 1) 
Set-ScheduledTask StartBasicServices_Local -Trigger $T 
+0

es esa parte de cmdlet de PowerShell nativo? o está en el PSCX o algo así? –

+1

Sí, excepto que no hace lo que la pregunta estaba haciendo. Está tratando de crear un activador diario que se ejecute cada hora. ¿Cómo se marca esto como aceptado? Esto me parece que está programando que se ejecute durante un día, cada 5 minutos. ¿Me estoy perdiendo de algo? –

0

Pruebe a usar Add-JobTrigger para agregar múltiples desencadenadores de trabajos a un trabajo programado.

+0

Sé acerca de Add-JobTrigger, pero no entiendo cómo lograr mi requisito específico: ejecutar un trabajo diariamente, repitiéndose cada hora, por una duración específica. Por ejemplo: todos los días, a las 10 AM, repitiendo cada 1 hora hasta las 5 PM. – scarmuega

0
clear 
Import-Module TaskScheduler 

# Create a new task 
$task = New-Task 


Add-TaskAction -Task $task -Path "C:\Windows\notepad.exe" 
Add-TaskTrigger -Task $task -Daily -At "06:00" -Repeat "05:00" -For "12:00" 

# Register the task 
Register-ScheduledTask -Name "PowerShell - MyScript.ps1" -Task $task 

Get-ScheduledTask PowerShell* | select -Property Name 
# Remove-Task -n Power* 
+0

http://blog.powershell.no/2012/05/28/working-with-scheduled-tasks-from-windows-powershell/ copie la pasta mucho? y ni siquiera es la solución a esta pregunta. Por favor prueba la solución antes de publicar. –

1

He estado trabajando en este tema todo el día y finalmente tengo la respuesta. No puedes No usar esos cmdlets de todos modos. Al principio pensé que esto podría funcionar como una solución alternativa:

$Job = Register-ScheduledJob -Name "YourJobName" {Gci}; 
$RepeatTrigger = New-JobTrigger -Once -At (Get-Date 10:00).ToShortTimeString() -  RepetitionInterval (New-TimeSpan -Hours 1) -RepetitionDuration (New-TimeSpan -Hours 7); 
$RepeatTrigger.Frequency = [Microsoft.PowerShell.ScheduledJob.TriggerFrequency]::Daily; 
Add-JobTrigger -InputObject $Job -Trigger $RepeatTrigger 

Sin embargo, no lo hace. Usando trace-command parece que valida los atributos dependiendo del conjunto de parámetros. Lo mismo es cierto cuando se usa schtasks:

schtasks /create /tn YourTask /tr notepad.exe /sc Hourly 

lo creará por hora pero de nuevo tendrá que ser una tarea una vez fuera. Por lo que se ve, hay un contenedor .Net para la API COM, que probablemente sea la mejor opción si eres nuevo en PoSH. Puede encontrarlo en CodePlex.

+0

Eso es lo que pensé. Gracias por la info. – scarmuega

1

lo que sé de complemento JobTrigger, pero no entiendo cómo lograr mi requisito específico : ejecutar un trabajo diario, que se repite cada hora, durante un tiempo determinado. Por ejemplo: todos los días, a las 10 a. M., Repitiendo cada 1 hora hasta las 5 p. M. - scarmuega 7 de octubre de 12 a 18:14

Cree el trabajo con Register-ScheduledJob. Luego agrega los disparadores diarios. Sería fantástico si pudiéramos hacer esto, pero el -Daily no funciona en PowerShell 4.0. Sigue leyendo, tengo una alternativa para ti.

# Technet: http://technet.microsoft.com/en-us/library/hh849759.aspx 
# To create a repeating schedule, use the Once parameter with the RepetitionDuration and RepetitionInterval parameters. 
# -RepetitionInterval Repeats the job at the specified time interval. For example, if the value of this parameter is 2 hours, the job is triggered every two hours. 
# The default value, 0, does not repeat the job. 
# -RepetitionDuration Repeats the job until the specified time expires. The repetition frequency is determined by the value of the RepetitionInterval parameter. 
# For example, if the value of RepetitionInterval is 5 minutes and the value of RepetitionDuration is 2 hours, the job is triggered every five minutes for two hours. 
# 
$trigger = New-JobTrigger -Daily -At 10:00 -RepetitionDuration 7:00:00 -RepetitionInterval 1:00:00 -DaysofWeek 
Register-ScheduledJob -Name Test -Trigger $trigger -ScriptBlock {} 

Puede organizar su trabajo de modo que tenga un activador por cada hora que desee.

$trigger4am = New-JobTrigger -Daily -At 04:10 
Register-ScheduledJob -Name ArchiveProd -Trigger $trigger4am -ScriptBlock {E:\ArchiveProd.ps1} 

$trigger8am = New-JobTrigger -Daily -At 08:10 
$trigger12pm = New-JobTrigger -Daily -At 12:10 
$trigger6pm = New-JobTrigger -Daily -At 18:10 
Add-JobTrigger -Trigger $trigger8am -Name ArchiveProd 
Add-JobTrigger -Trigger $trigger12pm -Name ArchiveProd 
Add-JobTrigger -Trigger $trigger6pm -Name ArchiveProd 

Espero que es lo que necesitabas. Funciona bien para mi situación, aunque preferiría simplemente agregar el parámetro Daily. ¿Tal vez alguien puede mejorar esto para mí?

+0

El parámetro -Trigger de Register/Set-ScheduledJob toma múltiples desencadenadores, por lo que simplemente ejecute el script de ese bebé: '-Trigger ((4..9 |% {$ h = $ _; '00', '15', '30' , '45' |% {"$ {h}: $ {_}"}}) + '10: 00 '|% {New-JobTrigger -Daily -At $ _}) 'te dará activadores por cada 15 minutos entre las 4am y las 10am. – Bergius

0

Una respuesta tardía, pero empecé con esta pregunta entonces se han buscado más y encontró una solución a this link, Petri.com

$principal = New-ScheduledTaskPrincipal -UserID MyDomain\MyGMSA$ -LogonType Password -RunLevel Highest 
$action = New-ScheduledTaskAction "E:\DoSomething" 
$when = New-ScheduledTaskTrigger -Daily -At "00:02" -DaysInterval 1 

Register-ScheduledTask -TaskName MyNewTask–Action $action –Principal $principal -Trigger $when 

$t = Get-ScheduledTask -TaskName MyNewTask 

$t.Triggers.repetition.Interval = "PT15M" #every 15 mins 
$t.Triggers.repetition.Duration = "PT7H30M" #for 7 hours 30 
$t | Set-ScheduledTask 
0

Se pueden crear múltiples disparadores, véase a continuación:

$job = Register-ScheduledJob -Name "Test1" -FilePath "C:\temp\script.ps1" 
$triggers = New-Object System.Collections.Generic.List[Microsoft.PowerShell.ScheduledJob.ScheduledJobTrigger] 
$times = ("08:00", "09:00", "10:00", "11:00", "12:00", "14:00", "15:00", "16:00", "17:00", "19:00", "22:00") 
foreach($t in $times){ 
$triggers.Add((New-JobTrigger -Daily -At $t)) 
} 
$job.AddTriggers($triggers, $true) 

o más fácil (pero más lento)

$MyJob = Register-ScheduledJob -Name "MyJob" -FilePath "C:\temp\test.ps1" 
$times = ("08:00", "09:00", "10:00", "11:00", "12:00", "14:00", "15:00", "16:00", "17:00", "19:00", "22:00") 
foreach($t in $times){$MyJob | Add-JobTrigger -trigger (New-JobTrigger -Daily -At $t)}