2012-10-07 15 views
5

Powershell v3 zawiera wszystkie te nowe polecenia cmdlet planowania zadań. Wyglądają świetnie, ale mam problem z utworzeniem konkretnego wyzwalacza. Muszę codziennie wykonywać pracę, powtarzając się co godzinę, przez określony czas.Powershell v3 New-JobTrigger codziennie z powtórzeniami

Korzystanie z interfejsu użytkownika Task-Scheduler jest proste, ale nie mogę znaleźć polecenia cmdlet New-JobTrigger.

Jeśli używam Daily zestawu parametrów, nie mam opcji Powtarzanie:

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

Jeśli używam raz zestawu parametrów, nie mogę mieć opcję Codziennie

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

To, czego potrzebuję, ale oczywiście nie działa, to połączenie tych dwóch elementów. Na przykład:

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

Czy to możliwe? Może mieszanie kilku wyzwalaczy dla tej samej pracy?

Odpowiedz

6

Działa to dla mnie:

Uwaga - Wiem, że oryginalne pytanie było związane z Nowym JobTrigger Zamiarem było stworzenie możliwego rozwiązania, które mogą być tłumaczony do New-JobTrigger jak dobrze dany problem dotyczy obu.

$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

jest częścią cmdlet natywnego PowerShell? czy jest to w PSCX czy coś takiego? –

+1

Tak, z wyjątkiem tego, że nie robi to, o co pytało. Próbuje stworzyć codzienny spust uruchamiany co godzinę. W jaki sposób jest to oznaczone jako zaakceptowane? Wygląda na to, że planujesz go uruchomić na jeden dzień, co 5 minut. Czy czegoś brakuje? –

0

Spróbuj użyć wielu wyzwalaczy zadań do zaplanowanego zadania.

+0

Wiem o Add-JobTrigger, ale nie rozumiem, jak osiągnąć moje konkretne wymaganie: uruchom pracę codziennie, powtarzając się co godzinę, przez określony czas. Na przykład: codziennie, o 10 rano, powtarzanie co godzinę do 5 po południu. – 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-crom-windows-powershell/ copy pasta much? i nie jest to nawet rozwiązanie tego problemu. Spróbuj rozwiązania przed opublikowaniem. –

1

Pracuję nad tym problemem przez cały dzień i wreszcie mam odpowiedź. Nie możesz. W każdym razie nie używając tych cmdletów. Na początku myślałem, że to może działać jako obejście:

$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 

Jednak nie robi. Używanie komendy trace wygląda tak, jakby sprawdzało atrybuty w zależności od zestawu parametrów. To samo dotyczy korzystania z aplikacji SCHTARS:

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

Zostanie utworzona co godzinę, ale znowu będzie to zadanie jednorazowe. Wygląda na to, że istnieje wrapper .Net dla interfejsu COM API, który prawdopodobnie będzie najlepszym wyborem, jeśli jesteś nowym użytkownikiem PoSH. Można go znaleźć na CodePlex.

+0

Tak myślałem. Dzięki za informację. – scarmuega

1

wiem o Add-JobTrigger, ale nie rozumiem, jak osiągnąć mój specyficzne wymagania: wykonanie zadania codziennie, powtarza się co godzinę, na określony czas. Na przykład: codziennie o 10 rano, powtarzając co godzinę do 5 po południu. - scarmuega Oct 7 '12 o 18:14

Utwórz pracę z Register-ScheduledJob. Następnie dodaj codzienne wyzwalacze. Byłoby świetnie, gdybyśmy mogli to zrobić, ale -Daily nie działa w PowerShell 4.0. Czytaj dalej, mam dla ciebie alternatywę.

# 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 {} 

Możesz po prostu zorganizować swoją pracę tak, aby miała wyzwalacz na każdą godzinę, którą chcesz.

$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 

Mam nadzieję, że to jest to, czego potrzebujesz. Działa dobrze w mojej sytuacji, chociaż wolałbym dodać parametr Dzienny. Może ktoś może to poprawić dla mnie?

+0

Parametr -Trigger rejestru/Set-ScheduledJob wymaga wielu wyzwalaczy, więc po prostu skryptuj to dziecko: '-Trigger ((4.9 |% {$ h = $ _; '00', '15', '30' , '45' |% {"$ {h}: $ {_}"}}) + '10: 00 '|% {New-JobTrigger -Daily -At $ _})) da ci wyzwalacze co 15 minut od 4 rano do 10 rano. – Bergius

0

Późne odpowiedź, ale zacząłem się z tym pytaniem następnie szukał dalej i znalazł rozwiązanie w 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

Można utworzyć wiele wyzwalaczy, patrz poniżej:

$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) 

i łatwiejsze (ale wolniej)

$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)} 
Powiązane problemy