HomeNewsletterCommunityMVP FeedToolsArchiveBlogToday's NewsAboutServicesQuick Links Subscribe free
← Back to Blog
Windows 11 Windows 11Task SchedulerHardeningServicingIntunePowerShellTroubleshooting

The Built-In Scheduled Tasks Windows 11 Actually Depends On

IA
Imran Awan
21 August 2026

A device stops installing updates. Its disk fills up over four months. Nobody gets an error. There is nothing in the System log, nothing in Windows Update history, and no failed Intune policy. Six weeks earlier somebody ran a hardening script that turned off a couple of hundred scheduled tasks, and Windows quietly stopped doing its own housekeeping. This is a reference for which of those tasks actually matter, what each one does, and how to audit a fleet for the ones that have been switched off.

The short version

Windows 11 keeps its own maintenance work in the Task Scheduler library under \Microsoft\Windows\. On the Windows 11 Enterprise build 26200 device used for this article there are 284 tasks there, and 47 of them are currently Disabled, a good number of those by design, which is why "disable everything that is off by default" and "flag every disabled task" are both wrong. A disabled task does not fail and does not log: it is simply never asked to run, so component store cleanup, drive optimisation, restore points and the BitLocker MDM policy refresh stop happening silently. There is no modern Group Policy for built-in task state at all, and Intune's entire TaskScheduler policy area contains exactly one setting, so the only realistic control is read-only auditing against a known-good reference image.

The problem: the chores stop and nothing complains

Task Scheduler is not just a place for your own scripts. Windows uses it as its own to-do list. Microsoft's service documentation for the Task Scheduler service says so directly: the service "also hosts multiple Windows system-critical tasks", and if you stop or disable it "these tasks don't run at their scheduled times".

That is the part most hardening work misses. Turning a built-in task off does not produce a failure. A failure needs a run. A disabled task never gets a run. So the device keeps booting, keeps checking in to Intune, keeps reporting compliant, and quietly stops doing a job you did not know it was doing.

The symptoms show up weeks or months later, and they never point at Task Scheduler:

It is worth comparing what Microsoft's own hardening guidance actually disables. In the whole of the Windows Server system services security guidance, the list of scheduled tasks Microsoft recommends disabling is two entries long: \Microsoft\XblGameSave\XblGameSaveTask and \Microsoft\XblGameSave\XblGameSaveTaskLogon. Two. A typical community "debloat" script disables somewhere between fifty and two hundred.

Do not bulk-disable, and never delete task files by hand. A task exists in two places at once: an XML definition file under C:\Windows\System32\Tasks and a set of registry entries under the Task Scheduler task cache. Microsoft's own procedure for clearing a corrupt task removes both halves together. Deleting only the file leaves a registry entry pointing at nothing; deleting only the registry entry leaves a definition that Task Scheduler cannot see and will never run. Either way you get a task that is present, invisible, or both, depending on which tool you ask.

The second trap is the mirror image of the first. On the reference device for this article, 47 of the 284 built-in tasks are Disabled and that is completely normal. The two ".NET Framework NGEN ... Critical" variants, both Offline Files synchronisation tasks, RunFullMemoryDiagnostic, the two Sysmain hybrid-drive tasks and the Storage Tiers optimisation task are all switched off on a device that has no reason to run them. Any audit that flags "task is Disabled" as a fault will hand you dozens of false positives before it finds a single real one.

Why it happens: two halves of a task store and a maintenance window

Before the reference table, here is the chain, in order, from trigger to result. Every step is somewhere you can look.

  1. The Task Scheduler service (short name Schedule) starts automatically at boot. It runs as LocalSystem inside a shared svchost.exe -k netsvcs process, and its service DLL is %systemroot%\system32\schedsvc.dll.
  2. The service reads the task store. That store has two halves: the XML definition files under C:\Windows\System32\Tasks, and the registry task cache that indexes them.
  3. A trigger fires. Triggers can be a clock, a boot, a logon, an event, an idle period, or, for a lot of built-in tasks, nothing at all except the Automatic Maintenance window.
  4. The action runs. If the action is an executable, the service launches it. If the action is a COM handler, taskhostw.exe ("Host Process for Windows Tasks") loads the handler and runs it in-process.
  5. The action's exit code is recorded as the task's LastTaskResult. If the operational event channel is enabled, the start, the action and the outcome are also written there.

Step 3 is where most of the confusion comes from. Open the definition file for the component store cleanup task and there is no schedule in it at all. This is Microsoft's own file, read straight off the device:

PowerShell - run elevated
Get-Content 'C:\Windows\System32\Tasks\Microsoft\Windows\Servicing\StartComponentCleanup' # Reads the raw task definition. It is UTF-16 XML with no file extension. <Settings> <ExecutionTimeLimit>PT1H</ExecutionTimeLimit> # the documented 1 hour timeout <DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries> <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries> <UseUnifiedSchedulingEngine>true</UseUnifiedSchedulingEngine> <MaintenanceSettings> <Period>P7D</Period> # try roughly every 7 days <Deadline>P14D</Deadline> # must succeed inside 14 days </MaintenanceSettings> </Settings> <Triggers /> # HEALTHY: empty on purpose. No clock trigger exists. <Actions Context="System"> <ComHandler><ClassId>{aaaaaaaa-0b0b-1c1c-2d2d-333333333333}</ClassId></ComHandler> </Actions> # COM handler, so taskhostw.exe runs it, not a .exe of its own

The <Triggers /> element being empty is not damage. It is the design. This task is an Automatic Maintenance task, and Automatic Maintenance decides when it runs.

What Automatic Maintenance is. Microsoft describes maintenance tasks as opportunistic: they run when the machine is idle and on AC power, so the work lands when it will not bother anybody. A maintenance task declares a period (how often it should happen, at least one day) and optionally a deadline (how long the scheduler may keep failing before it stops being polite). Inside a deadline the scheduler will extend the normal one-hour maintenance window to get the job done. Two consequences matter for auditing. First, a maintenance task on a laptop that is rarely idle on mains power can be starved for a long time and still be perfectly healthy. Second, Microsoft states that the system suspends an executing maintenance task when the user comes back to the PC. So a non-zero last result on a maintenance task is not automatically a fault.

The registry half of the task store

Everything below lives under one parent key. Microsoft's own troubleshooting article for corrupt scheduled tasks walks through each of these subkeys by name, which is how we can be confident of what they hold.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache
SubkeyWhat it holdsWhy you would read it
TreeThe folder hierarchy you see in the Task Scheduler console. Each task appears as a key whose name is the task name, carrying an Id value in GUID form and an SD value holding the security descriptor.This is the index. If a task's Tree key is gone, the task does not appear in the console even if its XML file is still on disk.
TasksOne key per task, named by the GUID from Tree, carrying a Path value with the task's library path.Resolves a GUID back to a task path. Microsoft's cleanup procedure for legacy at tasks works from the Path value here.
PlainTasks whose triggers are ordinary schedules.Microsoft states a task exists in exactly one of Plain, Logon or Boot. Knowing which tells you the trigger class without parsing XML.
LogonTasks triggered by a user logon.Same as above. Useful when a task only misbehaves for one account.
BootTasks triggered at system startup.Same as above. These are the ones that matter for a device that misbehaves before anyone signs in.
MaintenancePresent on Windows 11 alongside the three documented trigger classes. Microsoft's corrupt-task article does not describe it.Observed and undocumented. Read it for context only. Do not build detection logic on it, because an undocumented key can change in any update.
Gotcha: the two halves drift on purpose. On the reference device there are 284 task definition files under System32\Tasks\Microsoft\Windows but 317 Tree entries carrying an Id. The 33 extras are tasks Windows used to ship and no longer does, including Application Experience\Microsoft Compatibility Appraiser, Application Experience\ProgramDataUpdater, Customer Experience Improvement Program\KernelCeipTask and the four TaskScheduler\... Maintenance tasks. Get-ScheduledTask enumerates the files, not those keys. So a task can be genuinely "missing" from the library because Microsoft retired it, not because anyone deleted it. Direction is what matters: registry-without-file is usually a retired built-in, but file-without-registry is a real, silent breakage.

The binaries in the flow

FileWhat it isRole in the flow
C:\Windows\System32\schedsvc.dllTask Scheduler ServiceThe service itself. Microsoft documents that the Schedule service's ServiceDll value must be %systemroot%\system32\schedsvc.dll, and that a missing file here produces "Error 126: The specified module could not be found" when you try to start the service.
C:\Windows\System32\svchost.exeService hostHosts the Schedule service in the netsvcs group. The service does not have a process of its own.
C:\Windows\System32\taskhostw.exeHost Process for Windows TasksLoads and runs COM-handler task actions. A lot of built-in maintenance tasks are COM handlers, so this is the process you will see doing the work.
C:\Windows\System32\taskschd.dllTask Scheduler COM APIThe COM surface every tool goes through, including the console, schtasks.exe and the PowerShell cmdlets.
C:\Windows\System32\taskschd.mscConsole snap-inThe Task Scheduler UI. Also the only place to turn task history on.
C:\Windows\System32\schtasks.exeTask Scheduler Configuration ToolCommand-line front end. Microsoft notes it "performs the same operations as Scheduled Tasks in Control Panel" and the two are interchangeable.
C:\Windows\System32\Tasks\Task definition storeOne extension-less UTF-16 XML file per task, in folders mirroring the library path.
C:\Windows\Tasks\Legacy .job storeWhere pre-Vista at tasks lived. Microsoft's corrupt-task article still tells you to check it. Empty on a clean Windows 11 install.

The reference: built-in tasks that matter

Two rules were applied to this table. If Microsoft documents the task, the "Source" column says Doc and the description is theirs. If the task exists on a current Windows 11 install but Microsoft does not publish a reference for it, the column says Obs and you should treat the behaviour as observed rather than contractual. Nothing here came from a debloat script's comments.

Task (under \Microsoft\Windows\)What it doesWhat breaks if it is disabled
Servicing\StartComponentCleanup
Doc
Cleans up and compresses superseded components in the WinSxS component store during Automatic Maintenance. Waits at least 30 days after a component update before removing the previous version, and has a one hour timeout.The component store grows without bound and the disk fills slowly. Microsoft states plainly that it "strongly recommends not disabling component cleanup".
Defrag\ScheduledDefrag
Doc
Runs the drive optimisation maintenance task, typically weekly. On SSDs, traditional defragmentation and retrim run once per month regardless of how often you change the task schedule.Volumes are never optimised and SSDs are never retrimmed. Microsoft also lists the innocent reasons this task skips volumes: on battery, will not wake the machine, or the machine resumed from idle.
BitLocker\BitLocker MDM policy Refresh
Doc
Step 4 of Microsoft's documented Intune BitLocker flow. Replicates the BitLocker policy the MDM client received into the full volume encryption (FVE) registry key so encryption can start.Policy arrives, lands in the registry, and encryption never begins. The Intune encryption report shows the device as not encrypted with no error in the BitLocker-API log.
Registry\RegIdleBackup
Doc
Manages registry backups into C:\Windows\System32\config\RegBack. Since Windows 10 1803 that behaviour is off by design; Microsoft states that when an administrator re-enables it, Windows creates this task in the Microsoft\Windows\Registry folder.If you deliberately re-enabled RegBack backups, they stop. If you did not, an idle task here is expected rather than broken.
Windows Defender\Windows Defender Scheduled Scan
Doc
The scheduled antivirus scan. Microsoft's own support article points at this exact task under Task Scheduler Library > Microsoft > Windows > Windows Defender.Scheduled scans stop. Note this task is not present on every build; on the reference device the Defender folder holds Cache Maintenance, Cleanup and Verification instead. Set the scan schedule through policy, not here.
UpdateOrchestrator\Schedule Scan
Obs
Update Orchestrator scan scheduling. Microsoft documents the Orchestrator's role in scanning, downloading and installing updates, but publishes no reference for this individual task.Scanning is orchestrated from more than one place, so a disabled task here does not always stop updates outright. Treat it as strong evidence that something bulk-disabled the folder.
WaaSMedic\PerformRemediation
Obs
Runs the Windows Update medic remediation pass that repairs broken update components.Broken update components stop self-repairing, so a device that falls out of servicing tends to stay out.
SystemRestore\SR
Obs
Creates scheduled system restore points.No automatic restore points. The recovery route Microsoft recommends for a corrupt registry hive has nothing to restore from.
Chkdsk\ProactiveScan
Obs
NTFS proactive scan pass that works off recorded volume corruption during maintenance.Recorded corruption is never cleared in the background, so it surfaces as a full chkdsk at an inconvenient boot.
DiskCleanup\SilentCleanup
Obs
Runs the disk cleanup handlers silently.Temporary and update-leftover files are never reclaimed automatically.
TPM\Tpm-Maintenance
Obs
TPM maintenance pass that runs after servicing and provisioning changes.TPM state maintenance stops, so attestation and key provisioning problems are harder to self-heal.
.NET Framework\.NET Framework NGEN v4.0.30319 (and the 64 variant)
Obs
Rebuilds native images for managed assemblies during idle time.Managed applications fall back to JIT compilation and start more slowly. The two matching ... Critical variants ship Disabled and should stay that way.
Application Experience\*
Obs
Compatibility and appraiser work. Microsoft documents that the compatibility appraiser runs as a scheduled task in this folder and writes to the AppCompatFlags registry subkey, and that Windows Update for Business reports and the Intune compatibility reports depend on Windows diagnostic data at the Required level or higher.Feature-update readiness and compatibility reporting go blind, which is how a fleet ends up with no visibility into what is blocking the next Windows 11 upgrade. Task names here change between builds: the reference device has Microsoft Compatibility Appraiser Exp and no plain Microsoft Compatibility Appraiser at all.
XblGameSave\XblGameSaveTask and XblGameSaveTaskLogon
Doc
Xbox Live game save tasks.Nothing you care about on a managed endpoint. These are the only two scheduled tasks Microsoft's Windows Server services security guidance recommends disabling. Note the path is \Microsoft\XblGameSave\, outside the \Microsoft\Windows\ subtree.

How to verify: state, result codes, and the log that is off by default

There are three independent readings to take, and they answer different questions. State answers "will it ever run?". LastTaskResult answers "how did the last run end?". The operational event log answers "how have the last few weeks gone?". You need all three, because each one lies on its own.

1. State and last result, with PowerShell

The built-in ScheduledTasks module gives you both. Get-ScheduledTask returns the definition and the state; Get-ScheduledTaskInfo returns the run-time information for a task you pipe into it. No module needs installing; both ship with Windows.

PowerShell - run elevated
Get-ScheduledTask -TaskPath '\Microsoft\Windows\Servicing\' | ForEach-Object { $i = $_ | Get-ScheduledTaskInfo '{0,-9} 0x{1:X8} {2}' -f $_.State, ($i.LastTaskResult -band 0xFFFFFFFF), $_.TaskName } # Masks the result to 32 bits so it prints as the hex HRESULT everyone quotes. Ready 0x8007042B StartComponentCleanup # Ready = enabled and will run. Disabled = will never run, and will never fail either. # 0x8007042B is ERROR_PROCESS_ABORTED. On a MAINTENANCE task that is ambiguous, because # Microsoft documents that the system suspends maintenance work when the user returns. Disabled 0x00000000 OOBEFodSetup # BROKEN would look like: Disabled on StartComponentCleanup, or a result of 0x80041321 # (SCHED_E_INVALID_TASK_HASH) meaning the task image is corrupt or has been tampered with.

Read the result code against Microsoft's published constants rather than guessing. These are the values that show up on built-in tasks in practice.

LastTaskResultConstantHow to read it
0x00000000S_OKThe last run finished and reported success. This is what you want.
0x00041300SCHED_S_TASK_READYReady to run at its next scheduled time. Benign.
0x00041301SCHED_S_TASK_RUNNINGAn instance is running right now. Benign.
0x00041302SCHED_S_TASK_DISABLEDWill not run at the scheduled times because the task has been disabled.
0x00041303SCHED_S_TASK_HAS_NOT_RUNThe task has never run. Microsoft's BitLocker troubleshooting article says exactly this. It is not a failure, and it is very common on built-in tasks whose trigger has never fired.
0x00041304SCHED_S_TASK_NO_MORE_RUNSNo further runs are scheduled. Normal for one-shot provisioning tasks.
0x00041306SCHED_S_TASK_TERMINATEDThe last run was terminated by the user.
0x00041307SCHED_S_TASK_NO_VALID_TRIGGERSEither no triggers, or the existing ones are disabled or unset.
0x8004130ASCHED_E_TASK_NOT_READYA property needed to run the task has not been set.
0x80041321SCHED_E_INVALID_TASK_HASHThe task image is corrupt or has been tampered with. Investigate this one properly.
0x80041324SCHED_E_TASK_ATTEMPTEDThe service tried to run the task, but a constraint in the task definition blocked it. On battery is the classic cause.
0x80041326SCHED_E_TASK_DISABLEDThe task is disabled.
0x8007042B(ERROR_PROCESS_ABORTED as HRESULT)Not a Task Scheduler constant. It is the action's own result: the hosting process ended unexpectedly. Seen on healthy maintenance tasks that were suspended mid-run.
Gotcha: LastRunTime is meaningless when the task has never run. When LastTaskResult is 0x00041303, the LastRunTime that comes back is a placeholder, not a date. On the reference device those tasks report a LastRunTime in 1932. Other builds and locales report other nonsense values. This is observed behaviour that Microsoft does not document, so never write detection logic that compares LastRunTime against "now minus N days" without first checking the result code. You will classify every never-run task as catastrophically overdue.

2. The operational event log, which is switched off by default

Task Scheduler has a dedicated channel, and Microsoft is explicit that you have to turn it on. The Intune BitLocker troubleshooting guide says it outright: "You must manually enable this event log before logging any data". Its file on disk is a 10 MB circular log with no archiving, so it is a few weeks of history at best on a busy device.

Channel: Microsoft-Windows-TaskScheduler/Operational
File: C:\Windows\System32\winevt\Logs\Microsoft-Windows-TaskScheduler%4Operational.evtx

Every event ID below was read from the Microsoft-Windows-TaskScheduler provider manifest on the device itself, so the wording is Microsoft's own.

IDLevel and messageWhat it tells you
100Information. "Task Scheduler started ... instance of the ... task for user ..."The task was asked to run. The presence of 100 is proof the trigger worked.
101Error. "Task Scheduler failed to start ... task for user ... Error Value: ..."The launch itself failed. Read the error value, not the event.
102Information. "Task Scheduler successfully finished ... instance of the ... task"A clean completion. Pair 100 and 102 to time a run.
103Error. "Task Scheduler failed to start instance ... of ... task for user ..."Instance-level launch failure, usually a principal or credential problem.
106Information. "User ... registered Task Scheduler task ..."Somebody created the task. This is your audit trail for tasks appearing.
111Information. "Task Scheduler terminated ... instance of the ... task."The instance was ended. Read alongside 329 to work out why.
141Information. "User ... deleted Task Scheduler task ..."Somebody removed the task, and the event names the account.
142Information. "User ... disabled Task Scheduler task ..."The single most useful ID for this topic. If a hardening script switched a built-in task off, 142 records who did it and to what.
200 / 201Information. "launched action ..." / "successfully completed task ... action ..."Action-level start and finish. 201 is per-action success, which is a finer grain than 102.
203Error. "Task Scheduler failed to launch action ... Error Value: ..."The task started but its action could not be launched. Usually a missing binary or a bad path.
329Information. "... terminated ... due to exceeding the time allocated for execution, as configured in the task definition."The task hit its ExecutionTimeLimit. Microsoft's own user action is to increase the timeout or investigate the delay. Expect this on StartComponentCleanup, which has a documented one hour limit.
332Warning. "did not launch task ... because user ... was not logged on when the launching conditions were met."A user-context task fired with nobody signed in. Normal noise on shared or kiosk devices.

Turn the channel on and check what is in it. The console is where you enable it; wevtutil is the read-only way to confirm the state without touching anything.

taskschd.mscTask Scheduler (root, left pane)Action menuEnable All Tasks History
Event Viewer - Applications and Services Logs > Microsoft > Windows > TaskScheduler > Operational
Level Information   Event ID 142   Source TaskScheduler
User "CONTOSO\svc-hardening" disabled Task Scheduler task "\Microsoft\Windows\Servicing\StartComponentCleanup"
--- illustrative event body, identifiers replaced ---
Level Information   Event ID 329   Source TaskScheduler
Task Scheduler terminated "{aaaaaaaa-0b0b-1c1c-2d2d-333333333333}" instance of the "\Microsoft\Windows\Servicing\StartComponentCleanup" task due to exceeding the time allocated for execution, as configured in the task definition.

3. The registry half, and the service

If the console and PowerShell disagree with each other, the answer is in the task cache. Look up the task in Tree, note its Id, then confirm the same GUID exists under Tasks.

Registry Editor
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\Microsoft\Windows\Servicing\StartComponentCleanup
Id       REG_SZ     {aaaaaaaa-0b0b-1c1c-2d2d-333333333333}
Index     REG_DWORD  0x00000003
SD       REG_BINARY  01 00 04 9c ...
--- illustrative: GUID is a Microsoft placeholder, not a real device value ---

And check the service, because none of the above runs without it.

PowerShell - run elevated
Get-Service Schedule | Format-List Name,DisplayName,Status,StartType # The service short name is Schedule; its display name is Task Scheduler. Name : Schedule DisplayName : Task Scheduler Status : Running StartType : Automatic # HEALTHY: Running and Automatic. Microsoft documents Automatic as the default startup type. # BROKEN: Stopped, or StartType Disabled. Nothing in the library runs at all. wevtutil gl Microsoft-Windows-TaskScheduler/Operational # Read-only. Confirms whether task history is actually being recorded on this device. enabled: true # HEALTHY for auditing: true. BROKEN for auditing: false, which is the Windows default, # and means you have no per-run history to correlate against at all.
Gotcha: the service is stoppable, whatever you have read. It is widely repeated that the Task Scheduler service cannot be stopped. On Windows 11 Enterprise build 26200, sc.exe query Schedule reports STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN, and Microsoft's own service documentation is written on the assumption that you can: "If you stop or disable this service, these tasks don't run at their scheduled times". Also note the dependency chain. Microsoft documents that if the Time Broker service (TimeBrokerSvc) is stopped or disabled, the Task Scheduler service starts and then immediately stops. If a hardening baseline disabled Time Broker, this is your cause.

The fix: manage the schedule through policy, not by disabling the task

The rule that follows from all of the above is short. If you want different behaviour, change it through the documented policy surface for that feature and leave the task enabled. Disabling the task removes the mechanism instead of changing the setting, and it removes it silently.

Group Policy: the Task Scheduler node, and why it does nothing

There is a Task Scheduler node in Group Policy. Here is how to reach it.

  1. Press Windows + R, type gpedit.msc and press Enter. On a domain controller use gpmc.msc and edit a GPO instead.
  2. Expand Computer Configuration.
  3. Expand Administrative Templates.
  4. Expand Windows Components.
  5. Select Task Scheduler.
  6. You will see seven settings, including Prohibit New Task Creation, Prohibit Task Deletion, Hide Property Pages, Prevent Task Run or End and Prohibit Drag-and-Drop.
  7. Double-click any of them and read the Supported on field before you configure it.
gpedit.mscComputer ConfigurationAdministrative TemplatesWindows ComponentsTask Scheduler
Every setting in that node is scoped to pre-Vista Windows. This is not opinion. In C:\Windows\PolicyDefinitions\TaskScheduler.admx, which ships with Windows 11, all fourteen policy definitions (seven settings, machine and user variants) carry supportedOn ref="windows:SUPPORTED_WindowsPreVista". The matching string in en-US\Windows.adml resolves to "Windows Server 2003, Windows XP, and Windows 2000 only". They write to Software\Policies\Microsoft\Windows\Task Scheduler5.0, a key name that gives away its age. There is no modern Group Policy setting that enables, disables or protects a built-in scheduled task. If a baseline document tells you to lock down Task Scheduler here, it is wasting a GPO.

The one Task Scheduler policy area that does apply to Windows 11 is the maintenance window, and it lives in a different node.

  1. In gpedit.msc, expand Computer Configuration.
  2. Expand Administrative Templates, then Windows Components.
  3. Select Maintenance Scheduler.
  4. Configure Automatic Maintenance Activation Boundary to move the daily maintenance start time.
  5. Configure Automatic Maintenance Random Delay to spread the start across a fleet rather than hammering everything at once.
  6. Configure Automatic Maintenance WakeUp Policy if you want machines to wake to run maintenance.
  7. Run gpupdate /target:computer /force and confirm the values landed under Software\Policies\Microsoft\Windows\Task Scheduler\Maintenance.
gpedit.mscComputer ConfigurationAdministrative TemplatesWindows ComponentsMaintenance Scheduler

Those three settings are marked as supported on Windows 8 and later in msched.admx, so unlike the Task Scheduler node they genuinely apply. Changing the activation boundary is the correct fix for "maintenance runs at 3am and our laptops are off"; disabling the maintenance tasks is not.

Intune: what is actually there

Here is the honest answer, and it is short. Walk the Settings Catalog and see for yourself.

  1. Sign in to the Microsoft Intune admin center.
  2. Go to Devices, then Configuration.
  3. Select Create, then New policy.
  4. Set Platform to Windows 10 and later and Profile type to Settings catalog, then choose Create.
  5. Name the profile, then select Next.
  6. Choose Add settings and search the picker for Task Scheduler.
  7. You will find one category, Task Scheduler, containing one setting: Enable Xbox Game Save Task.
intune.microsoft.comDevicesConfigurationSettings catalogTask Scheduler
Gotcha: the entire TaskScheduler policy area is one setting. Microsoft's Policy CSP reference for the TaskScheduler area documents exactly one policy, EnableXboxGameSaveTask, at OMA-URI ./Device/Vendor/MSFT/Policy/Config/TaskScheduler/EnableXboxGameSaveTask, an integer defaulting to 0 (Disabled). That is the whole surface. There is no CSP, no Settings Catalog entry and no Endpoint Security setting that reports on or controls the state of a built-in scheduled task. Anything a vendor sells you as "scheduled task compliance" is a script running under the hood, which is fine as long as you know that is what it is.

Because there is no policy surface, the practical control is a read-only detection script plus a documented reference set. That is exactly what the companion script does, and why it is read-only by design.

Tip: derive your expected set from an image, not from the internet. Build a reference Windows 11 machine at the version and edition you deploy, patch it, and capture the full built-in task inventory with state. That list is your baseline. Compare fleet devices against it. Task names and default states genuinely differ between builds, editions and enrolment states, so a hard-coded list copied from a blog post (including this one) will drift within one or two releases. Capture the baseline like this: Get-ScheduledTask | Where-Object { $_.TaskPath -like '\Microsoft\Windows\*' } | Select-Object TaskPath,TaskName,State | Export-Csv .\baseline.csv -NoTypeInformation

Defender: change the schedule, not the task

The Defender folder in the task library is a favourite target, and it is the clearest example of doing it the wrong way. Microsoft's support article does point you at Windows Defender Scheduled Scan in Task Scheduler for a consumer machine, but for managed devices there is a real policy surface. Use it.

  1. In the Intune admin center, go to Endpoint security.
  2. Select Antivirus.
  3. Choose Create Policy.
  4. Set Platform to Windows and Profile to Microsoft Defender Antivirus, then select Create.
  5. Name the profile and select Next.
  6. Set the scan schedule settings: Scan Parameter for quick or full, Schedule Scan Day, Schedule Scan Time and Schedule Quick Scan Time.
  7. Assign the profile and select Create. Leave the Defender tasks alone entirely.
intune.microsoft.comEndpoint securityAntivirusMicrosoft Defender Antivirus profile

The same logic applies elsewhere. For drive optimisation, change the cadence in the Optimize Drives app, which Microsoft names as the supported way to change how often the task runs, and remember that the once-a-month SSD cadence is unaffected by that change. For component store cleanup, run Dism.exe /online /Cleanup-Image /StartComponentCleanup on demand instead of leaving the task off, and understand the difference: run by hand there is no 30 day grace period and no one hour timeout.

If a task has already been disabled

Re-enabling is one command, per task, from your reference list. Do it deliberately and one folder at a time, and record what you changed.

PowerShell - run elevated (this one WRITES - read the note below)
Enable-ScheduledTask -TaskPath '\Microsoft\Windows\Servicing\' -TaskName 'StartComponentCleanup' # The ScheduledTasks module equivalent. Returns the task object with State = Ready. schtasks /Change /TN "\Microsoft\Windows\Servicing\StartComponentCleanup" /ENABLE # The schtasks.exe equivalent. Microsoft notes schtasks and the Control Panel tool are # interchangeable, so either is fine. Both need an elevated prompt. SUCCESS: The parameters of scheduled task "\Microsoft\Windows\Servicing\StartComponentCleanup" have been changed. # HEALTHY response. A failure here usually means the task does not exist under that exact # path - check the Tree key, because the name may have changed between Windows builds.

Note that the companion script deliberately does none of this. Detection and remediation should be separate things you run at separate times, because a remediation that runs on a bad expected-set is worse than no remediation at all.

Proof it worked: a real read-only audit run

The block below is a genuine run of the companion script on the Windows 11 Enterprise build 26200 device used throughout this article, with the computer name and enrolment identifiers replaced. It is not illustrative output. Note what it does and does not flag.

PowerShell 5.1 - run elevated - Get-BuiltInTaskHealth.ps1
.\Get-BuiltInTaskHealth.ps1 == Environment =============================================================== Computer : CONTOSO-W11-01 OS : Microsoft Windows 11 Enterprise (build 26200) PowerShell : 5.1.26100.9168 Elevated : True Schedule svc : Running / StartType Automatic Ops log : IsEnabled=True RecordCount=16851 MaxSizeBytes=10485760 # HEALTHY: service Running, and the operational channel is on so history exists. # BROKEN would be IsEnabled=False - the Windows default - meaning no run history at all. == Reading the built-in task library ========================================= Tasks found under \Microsoft\Windows\ : 284 Currently Disabled : 47 Task XML files on disk : 284 TaskCache Tree entries with an Id : 317 INFO 33 Tree entr(ies) have no definition file on disk. This is usually NOT damage. Windows retires built-in tasks across releases and leaves the Tree key behind, so these are mostly tasks that no longer ship. - \Microsoft\Windows\Application Experience\Microsoft Compatibility Appraiser - \Microsoft\Windows\Application Experience\ProgramDataUpdater - \Microsoft\Windows\Customer Experience Improvement Program\KernelCeipTask - \Microsoft\Windows\TaskScheduler\Regular Maintenance - \Microsoft\Windows\WindowsUpdate\Automatic App Update # 33 registry entries with no file. The famous "Microsoft Compatibility Appraiser" is one of # them: retired by Microsoft on this build, not deleted by an admin. This is the direction of # drift that is safe. The reverse - a file with no Tree entry - would be flagged red. Failure events (101/103/203/329) in last 14 days: 771 == Findings ================================================================== [SUSPECT] \Microsoft\Windows\Servicing\StartComponentCleanup Source : Doc (Doc = documented by Microsoft, Obs = observed on a current build) What we saw : LastTaskResult 0x8007042B - ERROR_PROCESS_ABORTED as an HRESULT - the hosting process ended unexpectedly. Not corroborated by repeated failure events, so one bad run is as likely as a real fault. Maintenance tasks are suspended when the user returns to the machine, which can leave a non-zero result on a healthy device. Consequence : The component store grows without bound. Disk fills slowly with no error anywhere. Microsoft states it strongly recommends not disabling component cleanup. # SUSPECT, not FAILING, and the distinction is the whole point. A single non-zero result on # a maintenance task is not evidence of a fault. It is promoted to FAILING only when the # operational log shows repeated 101/103/203/329 events for that same task. [REVIEW] 18 other built-in task(s) are Disabled and are on neither the expected-enabled list nor the ships-disabled baseline. Some will be normal for this edition, image or enrolment state. A long list appearing across a whole fleet at once is the signature of a bulk disable. Compare against a known-good reference image before concluding either way. - \Microsoft\Windows\Management\Autopilot\DetectHardwareChange - \Microsoft\Windows\Management\Provisioning\Retry - \Microsoft\Windows\EnterpriseMgmt\{enrollment-id}\Wsc Startup event listener - \Microsoft\Windows\WindowsAI\Recall\InitialConfiguration # REVIEW is deliberately not an accusation. Several of these are normal for an Entra-joined, # Intune-enrolled device. Eighteen on one machine is context; eighteen identical entries # across four hundred machines is a hardening script. == Summary =================================================================== Expected tasks checked : 17 Findings : 2 Unexplained disabled : 18 This script changed nothing. Every operation above was a read.

The -Detailed switch prints the whole expected-task inventory rather than only the findings, which is the view you want when you are proving a device is clean rather than hunting for a fault.

PowerShell 5.1 - run elevated - Get-BuiltInTaskHealth.ps1 -Detailed
.\Get-BuiltInTaskHealth.ps1 -Detailed == Expected task inventory =================================================== Verdict State Result Source Task ------- ----- ------ ------ ---- OK Ready 0x00000000 Doc \Microsoft\Windows\BitLocker\BitLocker MDM policy Refresh OK Ready 0x00041303 Obs \Microsoft\Windows\BitLocker\BitLocker Encrypt All Drives OK Ready 0x00000000 Doc \Microsoft\Windows\Defrag\ScheduledDefrag OK Ready 0x00000000 Doc \Microsoft\Windows\Registry\RegIdleBackup OK Ready 0x00000000 Obs \Microsoft\Windows\Chkdsk\ProactiveScan OK Ready 0x00000000 Obs \Microsoft\Windows\DiskCleanup\SilentCleanup OK Ready 0x00000000 Obs \Microsoft\Windows\UpdateOrchestrator\Schedule Scan OK Ready 0x00000000 Obs \Microsoft\Windows\WaaSMedic\PerformRemediation OK Ready 0x00041303 Obs \Microsoft\Windows\WindowsUpdate\Scheduled Start SUSPECT Ready 0x8007042B Doc \Microsoft\Windows\Servicing\StartComponentCleanup SUSPECT Ready 0x8007042B Obs \Microsoft\Windows\SystemRestore\SR # HEALTHY rows: State Ready with 0x00000000, or 0x00041303 on a task that has genuinely # never had its trigger fire. Both BitLocker tasks are Ready, which is what you want to see # before you go looking for an encryption problem anywhere else. # BROKEN rows would read: DISABLED, MISSING, FAILING, or UNREADABLE. UNREADABLE matters - # the script reports a failed read as a finding rather than printing a clean result.

References

No community deep-dive on built-in Windows scheduled task dependencies could be verified as loading and being genuinely on this topic at the time of writing, so no MVP reference table appears here. Everything above is either a Microsoft source or is labelled as observed on the reference device.

PowerShell — companion script

Download it from Imran76Awan/Windows-11-Scripts — no sign-in required. It is read-only: it reports and never changes a device or anything in Intune. Validate it in your own environment before relying on the output.

Get-BuiltInTaskHealth.ps1 — Read-only health audit of the built-in Windows scheduled tasks under \Microsoft\Windows\.
View all scripts on GitHub
Was this post helpful?
React below — no account needed
Share this post
LinkedIn X / Twitter Reddit Bluesky

More from EndpointWeekly

Windows 11
The machine bluescreened and there is no dump file: Windows…
A memory dump only survives if five independent settings line up: the dump type, a page…
Windows 11
Windows Search finds nothing, or eats the disk: the index, its…
The Windows Search index is a real database on disk, and most search failures are a…
Windows 11
The firewall flipped to Public and broke everything: Network…
Being domain-joined does not earn you the Domain firewall profile. Windows only grants…