peass-ng/PEASS-ng · error · ArgumentOutOfRangeException

Task names ending with a period followed by three or fewer c

Error message

Task names ending with a period followed by three or fewer characters cannot be retrieved due to a bug in the native library.

What it means

Regex-based sentinel in RegisterTaskDefinition: it rejects task names that end in a period followed by up to three characters (pattern \.[^invalid]{0,3}\z). This is not arbitrary strictness — the native Task Scheduler 1.0 library cannot retrieve tasks with such names (the suffix collides with file-extension handling of the .job file), so registration is blocked to prevent an unretrievable task.

Source

Thrown at winPEAS/winPEASexe/winPEAS/TaskScheduler/TaskFolder.cs:521

				}*/
                else if (logonType == TaskLogonType.Group && password != null)
                {
                    throw new ArgumentException(@"A password cannot be supplied when specifying TaskLogonType.Group.", nameof(password));
                }
                // The following line compensates for an omission in the native library that never actually sets the registration date (thanks ixm7).
                if (definition.RegistrationInfo.Date == DateTime.MinValue) definition.RegistrationInfo.Date = DateTime.Now;
                var iRegTask = v2Folder.RegisterTaskDefinition(path, definition.v2Def, (int)createType, userId ?? user.Name, password, logonType, sddl);
                if (createType == TaskCreation.ValidateOnly && iRegTask == null)
                    return null;
                return Task.CreateTask(TaskService, iRegTask);
            }

            // Check for V1 invalid task names
            string invChars = Regex.Escape(new string(System.IO.Path.GetInvalidFileNameChars()));
            if (Regex.IsMatch(path, @"[" + invChars + @"]"))
                throw new ArgumentOutOfRangeException(nameof(path), @"Task names may not include any characters which are invalid for file names.");
            if (Regex.IsMatch(path, @"\.[^" + invChars + @"]{0,3}\z"))
                throw new ArgumentOutOfRangeException(nameof(path), @"Task names ending with a period followed by three or fewer characters cannot be retrieved due to a bug in the native library.");

            // Adds ability to set a password for a V1 task. Provided by Arcao.
            TaskFlags flags = definition.v1Task.GetFlags();
            if (logonType == TaskLogonType.InteractiveTokenOrPassword && string.IsNullOrEmpty(password))
                logonType = TaskLogonType.InteractiveToken;
            switch (logonType)
            {
                case TaskLogonType.Group:
                case TaskLogonType.S4U:
                case TaskLogonType.None:
                    throw new NotV1SupportedException("This LogonType is not supported on Task Scheduler 1.0.");
                case TaskLogonType.InteractiveToken:
                    flags |= (TaskFlags.RunOnlyIfLoggedOn | TaskFlags.Interactive);
                    definition.v1Task.SetAccountInformation(user.Name, IntPtr.Zero);
                    break;
                case TaskLogonType.ServiceAccount:
                    flags &= ~(TaskFlags.Interactive | TaskFlags.RunOnlyIfLoggedOn);
                    definition.v1Task.SetAccountInformation((String.IsNullOrEmpty(userId) || user.IsSystem) ? String.Empty : user.Name, IntPtr.Zero);

View on GitHub (pinned to 53fb989abc)

Solutions

  1. Rename the task so it does not end with a period followed by three or fewer characters (e.g. avoid names like 'task.abc' or 'task.')
  2. Use names that end with four or more characters after any period, or contain no trailing period
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at winPEAS/winPEASexe/winPEAS/TaskScheduler/TaskFolder.cs:521 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of peass-ng/PEASS-ng@53fb989abc (2026-09-02). Data as JSON: /api/errors/a7bfed018c962c64. Report an issue: GitHub.