{"record":{"id":"731b9cbb612bdcdb","repo":"peass-ng/PEASS-ng","slug":"trigger-repetition-interval-must-be-less-than-trig","errorCode":null,"errorMessage":"Trigger.Repetition.Interval must be less than Trigger.Repetition.Duration under Task Scheduler 1.0.","messagePattern":"Trigger\\.Repetition\\.Interval must be less than Trigger\\.Repetition\\.Duration under Task Scheduler 1\\.0\\.","errorType":"exception","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"winPEAS/winPEASexe/winPEAS/TaskScheduler/Trigger.cs","lineNumber":2405,"sourceCode":"                    var o = unboundValues[key];\n                    CheckBindValue(key, ref o);\n                    v2Trigger.GetType().InvokeMember(key, System.Reflection.BindingFlags.SetProperty, null, v2Trigger, new[] { o });\n                }\n                catch (System.Reflection.TargetInvocationException tie) when (tie.InnerException != null) { throw tie.InnerException; }\n                catch { /* ignored */ }\n            }\n            unboundValues.Clear();\n            unboundValues = null;\n\n            repititionPattern = new RepetitionPattern(this);\n            repititionPattern.Bind();\n        }\n\n        /// <summary>Assigns the unbound TriggerData structure to the V1 trigger instance.</summary>\n        internal void SetV1TriggerData()\n        {\n            if (v1TriggerData.MinutesInterval != 0 && v1TriggerData.MinutesInterval >= v1TriggerData.MinutesDuration)\n                throw new ArgumentException(\"Trigger.Repetition.Interval must be less than Trigger.Repetition.Duration under Task Scheduler 1.0.\");\n            if (v1TriggerData.EndDate <= v1TriggerData.BeginDate)\n                throw new ArgumentException(Resources.Error_TriggerEndBeforeStart);\n            if (v1TriggerData.BeginDate == DateTime.MinValue)\n                v1TriggerData.BeginDate = DateTime.Now;\n            v1Trigger?.SetTrigger(ref v1TriggerData);\n            System.Diagnostics.Debug.WriteLine(v1TriggerData);\n        }\n\n        /// <summary>Checks the bind value for any conversion.</summary>\n        /// <param name=\"key\">The key (property) name.</param>\n        /// <param name=\"o\">The value.</param>\n        protected virtual void CheckBindValue(string key, ref object o)\n        {\n            if (o is TimeSpan ts)\n                o = Task.TimeSpanToString(ts);\n            if (o is DateTime dt)\n            {\n                if (key == \"EndBoundary\" && dt == DateTime.MaxValue || key == \"StartBoundary\" && dt == DateTime.MinValue)","sourceCodeStart":2387,"sourceCodeEnd":2423,"githubUrl":"https://github.com/peass-ng/PEASS-ng/blob/53fb989abc2219826385683a6fee826bd6cd38d6/winPEAS/winPEASexe/winPEAS/TaskScheduler/Trigger.cs#L2387-L2423","documentation":"SetV1TriggerData throws ArgumentException when converting a trigger to Task Scheduler 1.0 format if the repetition Interval (MinutesInterval) is not less than the repetition Duration (MinutesDuration) — and Interval is non-zero. The v1 TASK_TRIGGER structure enforces this constraint, so the library rejects the mapping.","triggerScenarios":"Assigning a Trigger whose Repetition.Interval >= Repetition.Duration (or Duration unset/zero while Interval set) then binding it to a v1 task; e.g. Interval = 1 hour, Duration = 30 minutes.","commonSituations":"Config authored for Task Scheduler 2.0 semantics (where interval may exceed duration meaning indefinite repetition) run on XP/2003; copied XML with repetition values the v1 engine can't express.","solutions":["Set Repetition.Duration greater than Repetition.Interval","Remove Repetition.Interval (set to zero) for v1 compatibility","Target Task Scheduler 2.0 so the v1 constraint doesn't apply"],"exampleFix":"// before\ntrigger.Repetition.Interval = TimeSpan.FromHours(1);\ntrigger.Repetition.Duration = TimeSpan.FromMinutes(30);\n// after\ntrigger.Repetition.Interval = TimeSpan.FromMinutes(30);\ntrigger.Repetition.Duration = TimeSpan.FromHours(1);","handlingStrategy":"validation","validationCode":"static void ValidateRepetition(Trigger t) {\n    var i = t.Repetition.Interval; var d = t.Repetition.Duration;\n    if (i != TimeSpan.Zero && d != TimeSpan.Zero && i >= d)\n        throw new ArgumentException(\"Repetition.Interval must be less than Repetition.Duration.\");\n}","typeGuard":null,"tryCatchPattern":"try { folder.RegisterTaskDefinition(name, def, ...); }\ncatch (ArgumentException ex) when (ex.Message.Contains(\"Repetition\")) { /* adjust interval/duration and retry */ }","preventionTips":["Always set Duration > Interval when using repetition","Skip repetition settings on Task Scheduler 1.0 targets","Add a unit test that binds every configured trigger to a v1 task"],"tags":["task-scheduler","trigger","repetition","v1-compatibility"],"backgroundTag":"trigger-repetition-interval-duration-invalid","analyzedSha":"53fb989abc2219826385683a6fee826bd6cd38d6","analyzedAt":"2026-09-02T04:25:09.259Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-09T11:17:12.671Z"}