2012-10-07 17 views
5

पावरहेल v3 इन सभी नए नौकरी-शेड्यूलिंग cmdlets के साथ आता है। वे बहुत अच्छे लगते हैं, लेकिन मुझे एक विशिष्ट ट्रिगर बनाने में परेशानी हो रही है। मुझे एक विशिष्ट अंतराल के लिए प्रतिदिन खुद को दोहराने की ज़रूरत है।पावरहेल v3 नया-जॉब ट्रिगर रोजाना दोहराव

टास्क-शेड्यूलर UI का उपयोग करना सीधा है, लेकिन मुझे न्यू-जॉब ट्रिगर सेमीडलेट के आसपास अपना रास्ता नहीं मिल रहा है।

अगर मैं डेली पैरामीटर-सेट का उपयोग, मैं दोहराव विकल्प नहीं है:

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

अगर मैं एक बार पैरामीटर-सेट का उपयोग, मैं डेली विकल्प

New-JobTrigger [-Once] -At <DateTime> [-RandomDelay <TimeSpan> ] [-RepetitionDuration <TimeSpan> ] [-RepetitionInterval <TimeSpan> ] [ <CommonParameters>] 
नहीं हो सकता

मुझे क्या चाहिए, लेकिन स्पष्ट रूप से काम नहीं करता है, दोनों के बीच एक मिश्रण है। उदाहरण के लिए:

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

क्या यह संभव है? शायद एक ही नौकरी के लिए कई ट्रिगर्स मिश्रण?

उत्तर

6

यह मेरे लिए काम करता है:

नोट - मुझे पता है कि मूल प्रश्न नई JobTrigger से संबंधित था आशय एक संभव समाधान है कि अनुवाद किया जा सकता है नई JobTrigger करने के साथ ही इस मुद्दे को दिए गए प्रदान करना था दोनों पर लागू होता है।

$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

वह देशी पावरशेल का cmdlet हिस्सा है? या यह पीएससीएक्स या कुछ में है? –

+1

हाँ, सिवाय इसके कि यह सवाल नहीं करता है कि सवाल क्या पूछ रहा था। वह एक दैनिक ट्रिगर बनाने की कोशिश कर रहा है जो प्रति घंटा चलता है। इसे स्वीकार किए जाने के रूप में कैसे चिह्नित किया जाता है? यह मेरे लिए ऐसा लगता है कि आप इसे हर दिन 5 मिनट के लिए चलाने के लिए शेड्यूल कर रहे हैं। क्या मैं कुछ भूल रहा हूँ? –

0

शेड्यूल किए गए नौकरी में एकाधिक जॉब ट्रिगर जोड़ने के लिए Add-JobTrigger का उपयोग करने का प्रयास करें।

+0

मुझे एड-जॉब ट्रिगर के बारे में पता है, लेकिन मुझे समझ में नहीं आता कि मेरी विशिष्ट आवश्यकता कैसे प्राप्त करें: नौकरी चलाएं एक विशिष्ट अवधि के लिए, हर घंटे खुद को दोहराना। उदाहरण के लिए: हर दिन, सुबह 10 बजे, 5 बजे तक हर 1 घंटे दोहराते हैं। – 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/ कॉपी पास्ता ज्यादा? और यह इस सवाल का समाधान भी नहीं है। पोस्ट करने से पहले समाधान का प्रयास करें। –

1

मैं पूरे दिन इस मुद्दे पर काम कर रहा हूं और अंत में इसका जवाब है। आप नहीं कर सकते वैसे भी उन cmdlets का उपयोग नहीं कर रहे हैं। सबसे पहले मैंने सोचा कि यह कामकाज के रूप में काम कर सकता है:

$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 

हालांकि, यह नहीं करता है। ट्रेस-कमांड का उपयोग करना ऐसा लगता है कि यह पैरामीटर सेट के आधार पर गुणों को मान्य करता है। Schtasks का उपयोग करते समय भी यही सच है:

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

यह इसे प्रति घंटा बनाएगा लेकिन फिर इसे एक बार कार्य करना होगा। चीजों के दिखने से COM एपीआई के लिए एक नेट रैपर होता है जो संभवतः आपकी सर्वश्रेष्ठ शर्त होगी क्योंकि आपका नया पीओएसएच है। आप इसे CodePlex पर पा सकते हैं।

+0

यही मैंने सोचा था। जानकारी के लिए धन्यवाद। – scarmuega

1

मैं ऐड-JobTrigger पता के बारे में है, लेकिन मुझे समझ नहीं आता कि मेरे विशिष्ट आवश्यकता को प्राप्त करने के: दैनिक एक नौकरी चलाने के लिए, अपने आप को हर घंटे, दोहरा एक विशिष्ट अवधि के लिए। उदाहरण के लिए: हर दिन, सुबह 10 बजे, 512 बजे तक प्रत्येक 1 घंटे दोहराएं। - scarmuega 7 अक्टूबर 1212

रजिस्टर-शेड्यूल्ड जॉब के साथ नौकरी बनाएं। फिर दैनिक ट्रिगर्स जोड़ें। यह अच्छा होगा अगर हम ऐसा कर सकें, लेकिन दैनिक PowerShell 4.0 में काम नहीं करता है। पढ़ें, मेरे पास आपके लिए एक विकल्प है।

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

आप बस अपना काम व्यवस्थित कर सकते हैं ताकि आपके इच्छित प्रत्येक घंटे के लिए ट्रिगर हो।

$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 

आशा है कि आपको वही चाहिए जो आपको चाहिए। यह मेरी स्थिति के लिए अच्छा काम करता है, हालांकि मैं केवल दैनिक पैरामीटर जोड़ना पसंद करूंगा। शायद कुछ मेरे लिए इस पर सुधार कर सकते हैं?

+0

रजिस्टर/सेट-शेड्यूल्ड जोब का ट्रिगर पैरामीटर एकाधिक ट्रिगर्स लेता है, इसलिए बस उस बच्चे को स्क्रिप्ट करें: '-ट्रिगर ((4..9 |% {$ एच = $ _;' 00 ',' 15 ',' 30 ' , '45' |% {"$ {h}: $ {_}"}}) + '10: 00 '|% {नया-जॉब ट्रिगर-दैनिक- $ _})' आपको हर 15 मिनट के लिए ट्रिगर्स देगा 4 बजे से 10 बजे के बीच। – Bergius

0

एक देर से जवाब है, लेकिन मैं इस सवाल के साथ शुरू किया तो अधिक खोज की है और 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

आप एक से अधिक ट्रिगर बना सकते हैं पर एक समाधान पाया, नीचे देखें:

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

या आसान (लेकिन धीमी)

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