毎日トリガーされ、30分ごとに繰り返される新しいスケジュールされたタスクを作成する方法を理解できないようです。私は輪になってきた。
以下のこれに関するすべては、私が望むタスクを設定するために機能しますが、一度だけトリガーされます。
#Credentials to run task as
$username = "$env:USERDOMAIN\$env:USERNAME" #current user
$password = "notmypass"
#Location of Scripts:
$psscript = "C:\test\test.ps1"
$Sourcedir ="C:\testsource\"
$destdir = "C:\testdest\"
$archivepassword = "notmypass"
####### Create New Scheduled Task
$action = New-ScheduledTaskAction -Execute "Powershell" -Argument "-WindowStyle Hidden `"$psscript `'$sourcedir`' `'$destdir`' `'$archivepassword`'`""
$trigger = New-ScheduledTaskTrigger -Once -At 7am -RepetitionDuration (New-TimeSpan -Days 1) -RepetitionInterval (New-TimeSpan -Minutes 30)
$settings = New-ScheduledTaskSettingsSet -Hidden -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -StartWhenAvailable -RunOnlyIfNetworkAvailable
$ST = New-ScheduledTask -Action $action -Trigger $trigger -Settings $settings
Register-ScheduledTask EncryptSyncTEST -InputObject $ST -User $username -Password $password
-Once
を-Daily
に変更すると、-RepetitionInterval
フラグが失われます。そして、登録後にタスクを毎日に更新するために戻った場合、繰り返しトリガーを消去します。
これは珍しいスケジューリング方法ではなく、タスクスケジューラUIを使用して簡単に適用できます。おそらくシンプルな気がしますが、見逃しています。
どんな助けも大歓迎です。
EDIT:重複した質問への対処。投稿の質問「 Powershell v3 New-JobTrigger daily with repeat 」は同じことを求めています。しかし、以前にコメントしたように、答えはどれも問題を解決しません。マークされた答えは、私がすでに持っているものとまったく同じです。-Onceトリガーでタスクを設定し、1日間5分ごとに繰り返すように更新します。初日以降、そのタスクは二度とトリガーされません。次のトリガーまでの繰り返しと期間で毎日タスクをトリガーする問題に対処していません。
その投稿の他の3つの回答も質問に対応していません。それが正しいとは限らないので、なぜそれが回答とマークされたのか分かりません。この質問を投稿する前に、これらの応答を完全に調査しました。この投稿は古くなっており、回答済みとマークされているため、この質問を作成しました。
注:私は回避策を見つけましたが、素晴らしいものではありません。現在のところ、powershellを使用してカスタムトリガーを定義する最も簡単な方法は、Scheduled Task XMLを操作し、Register-ScheduledTask
を使用して直接インポートすることです
より良い方法があるはずですが、これは私の現在の回避策です。
必要なトリガーを使用してタスクを作成し、生成されたXMLを取得しました。
以下では、タスクを作成し、その新しいタスクのXMLを取得し、トリガーを置き換え、タスクの登録を解除して、更新されたXMLで再登録します。
長期的には、おそらくタスクに完全なXMLファイルを使用し、必要に応じて文字列を置き換えますが、これは今のところ機能します。
#Credentials to run task as
$username = "$env:USERDOMAIN\$env:USERNAME" #current user
$password = "notmypass"
#Location of Scripts:
$psscript = "C:\test\test.ps1"
$Sourcedir ="C:\testsource\"
$destdir = "C:\testdest\"
$archivepassword = "notmypass"
####### Create New Scheduled Task
$action = New-ScheduledTaskAction -Execute "Powershell" -Argument "-WindowStyle Hidden '$EncryptSync' '$sourcedir' '$destdir' '$archivepassword'"
$trigger = New-ScheduledTaskTrigger -Once -At 7am -RepetitionDuration (New-TimeSpan -Days 1) -RepetitionInterval (New-TimeSpan -Minutes 30)
$settings = New-ScheduledTaskSettingsSet -Hidden -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -StartWhenAvailable -RunOnlyIfNetworkAvailable
$ST = New-ScheduledTask -Action $action -Trigger $trigger -Settings $settings
Register-ScheduledTask "EncryptSyncTEST" -InputObject $ST -User $username -Password $password
[xml]$EncryptSyncST = Export-ScheduledTask "EncryptSyncTEST"
$UpdatedXML = [xml]'<CalendarTrigger xmlns="http://schemas.Microsoft.com/windows/2004/02/mit/task"><Repetition><Interval>PT30M</Interval><Duration>P1D</Duration><StopAtDurationEnd>false</StopAtDurationEnd></Repetition><StartBoundary>2013-11-18T07:07:15</StartBoundary><Enabled>true</Enabled><ScheduleByDay><DaysInterval>1</DaysInterval></ScheduleByDay></CalendarTrigger>'
$EncryptSyncST.Task.Triggers.InnerXml = $UpdatedXML.InnerXML
Unregister-ScheduledTask "EncryptSyncTEST" -Confirm:$false
Register-ScheduledTask "EncryptSyncTEST" -Xml $EncryptSyncST.OuterXml -User $username -Password $password
スケジュールされたタスクトリガーのPowerShellインターフェイスは制限されていますが、RepetitionDuration
を[System.TimeSpan]::MaxValue
に設定すると、結果は "無期限"になります。
$trigger = New-ScheduledTaskTrigger `
-Once `
-At (Get-Date) `
-RepetitionInterval (New-TimeSpan -Minutes 5) `
-RepetitionDuration ([System.TimeSpan]::MaxValue)
Windows Server 2012 R2(PowerShell 4.0)でテスト済み
Powershell(私のマシンではv5、YMMV)で12AM、毎日、および1日ごとに繰り返しその日の残りの時間したがって、無期限に実行されます。トリガーはタスクスケジューラに次のように表示されるため、前述のように-RepetitionDuration
を([timespan]::MaxValue)
に設定するよりも優れたアプローチだと思います。
毎日午前12:00-トリガー後、30分間ごとに1日間繰り返します。
タスクが登録された日付が-Once -At 12am
を使用するアプローチとしてトリガーに表示されるのではなく、単純な-Daily -At 12am
としてトリガーを作成し、タスクを登録してから、タスクのいくつかのプロパティにアクセスします。プロパティ;
$action = New-ScheduledTaskAction -Execute <YOUR ACTION HERE>
$trigger = New-ScheduledTaskTrigger -Daily -At 12am
$task = Register-ScheduledTask -TaskName "MyTask" -Trigger $trigger -Action $action
$task.Triggers.Repetition.Duration = "P1D" //Repeat for a duration of one day
$task.Triggers.Repetition.Interval = "PT30M" //Repeat every 30 minutes, use PT1H for every hour
$task | Set-ScheduledTask
//At this point the Task Scheduler will have the desirable description of the trigger.
これを達成するために見つけた最も簡単な方法は、schtasks.exeを使用することです。 https://msdn.Microsoft.com/en-us/library/windows/desktop/bb736357%28v=vs.85%29.aspx で完全なドキュメントを参照してください
schtasks.exe /CREATE /SC DAILY /MO 1 /TN 'task name' /TR 'powershell.exe C:\test.ps1' /ST 07:00 /RI 30 /DU 24:00
これにより、毎日実行され、30分ごとに1日間繰り返されるタスクが作成されます。
別の方法は、次のように複数のトリガーを作成することです。
$startTimes = @("12:30am","6am","9am","12pm","3pm","6pm")
$triggers = @()
foreach ( $startTime in $startTimes )
{
$trigger = New-ScheduledTaskTrigger -Daily -At $startTime -RandomDelay (New-TimeSpan -Minutes $jitter)
$triggers += $trigger
}
基本トリガーを作成します。
$t1 = New-ScheduledTaskTrigger -Daily -At 01:00
セカンダリトリガーを作成します。
$t2 = New-ScheduledTaskTrigger -Once -RepetitionInterval (New-TimeSpan -Minutes 15) -RepetitionDuration (New-TimeSpan -Hours 23 -Minutes 55)
セカンダリから繰り返しオブジェクトを取得し、ベーストリガーに挿入します。
$t1.Repetition = $t2.Repetition
ボブのおじさん:
New-ScheduledTask -Trigger $t1 -Action ...
Windows 10で無限のタスク期間を希望する場合は、これを使用します(-RepetitionDurationを指定しないでください)
$action = New-ScheduledTaskAction -Execute (Resolve-Path '.\main.exe')
$trigger = New-ScheduledTaskTrigger -Once -At (Get-Date) -RepetitionInterval (New-TimeSpan -Hours 1)
Register-ScheduledTask -Action $action -Trigger $trigger -TaskName "GettingDataFromDB" -Description "Dump of new data every hour"
https://stackoverflow.com/a/54674840/9673214 @SteinIPソリューションはわずかな変更で機能しました
「セカンダリトリガーの作成」パーツに、「ベーストリガーの作成」パーツと同じ値を持つ「-At」パラメーターが追加されました。
基本トリガーを作成する
$t1 = New-ScheduledTaskTrigger -Daily -At 01:00
セカンダリトリガーを作成します。
$t2 = New-ScheduledTaskTrigger -Once -RepetitionInterval (New-TimeSpan -Minutes 15) -RepetitionDuration (New-TimeSpan -Hours 23 -Minutes 55) -At 01:00
魔法をかける:
$t1.Repetition = $t2.Repetition
New-ScheduledTask -Trigger $t1 -Action ...