Backup Windows Services & Task Scheduler: Win11 Guide
Step-by-step guide to backup and transfer enabled/disabled states of Windows services and Task Scheduler tasks between Windows 11 systems. Use PowerShell, registry exports, schtasks for safe migration with scripts and verification.
How to backup and transfer the enabled/disabled state of Windows services and Task Scheduler tasks from one Windows 11 system to another? Scenario: System 1 has specific services and tasks disabled; System 2 is a default installation.
To backup Windows services (enabled/disabled) and Task Scheduler tasks for a Windows 11-to-Windows 11 transfer, export the service startup settings (preferably a safe CSV of StartMode or individual service registry subkeys) and export each scheduled task as XML; then import or apply those settings on the target machine and re-disable tasks/services that must remain disabled. Use PowerShell (Get-CimInstance / Set-Service / Get-ScheduledTask / Export-ScheduledTask), reg export/reg import for registry-backed service keys, and schtasks or Register-ScheduledTask to recreate tasks — always run as Administrator and verify credentials and machine-specific entries after import.
Contents
- Backup Windows services (enabled/disabled)
- Backup and transfer Task Scheduler tasks
- What to back up — what is safe and what to avoid
- Step-by-step scripts you can copy (PowerShell + reg + schtasks)
- Verification and troubleshooting
- Sources
- Conclusion
Backup Windows services (enabled/disabled)
Why this matters: services store their startup type (Automatic / Manual / Disabled) in the registry under HKLM\SYSTEM\CurrentControlSet\Services and in WMI/CIM (Win32_Service). You can capture “what’s disabled” two safe ways: export a simple list (CSV) and reapply via PowerShell, or export the service registry subkeys to preserve every configuration value (more complete but riskier). For background and examples that use reg export and PowerShell, see the registry approach described at James Parker and community guidance on Server Fault: https://www.jamesparker.dev/how-do-i-back-up-windows-service-configurations/ and https://serverfault.com/questions/867412/backup-and-restore-a-windows-service.
Key facts (quick):
- Registry location: HKLM\SYSTEM\CurrentControlSet\Services<ServiceName>
- Start value mapping (registry / legacy): 0 = Boot, 1 = System, 2 = Automatic, 3 = Manual, 4 = Disabled
- Run everything elevated (Administrator).
Recommended approaches (pick one):
- Safer / recommended for most admins — Export start modes (CSV) and reapply
- Pros: low risk, easy to review, skip services not present on target.
- Use Get-CimInstance (Win32_Service) to capture StartMode, then Set-Service (or sc.exe) to apply on the target.
- Precise / registry-backed — Export service subkeys
- Pros: preserves dependencies, ObjectName, other registry settings.
- Cons: can break the target when hardware, drivers or service copies differ; requires caution and backups.
- Use reg export / reg import or regedit .reg files.
Examples and small snippets are in the Step-by-step section below. For a ready script ideas and a .reg/.bat approach see a detailed guide at WinHelpOnline: https://www.winhelponline.com/blog/backup-windows-services-configuration/.
Backup and transfer Task Scheduler tasks
Task Scheduler stores tasks as XML definitions; exporting/importing XML is the right tool to preserve actions, triggers and (usually) enabled/disabled state. You can export tasks via the GUI (Task Scheduler → right-click → Export), via PowerShell (Export-ScheduledTask), or with schtasks for import. TheWindowsClub documents the GUI/PowerShell/schtasks methods: https://www.thewindowsclub.com/import-or-export-tasks-from-task-scheduler.
Two workflow options:
- Bulk export all tasks (recommended when you want an exact copy of the scheduled jobs).
- Export just the tasks whose enabled/disabled state differs from the default (recommended when System 1 only has a few tasks disabled).
Common commands from community sources:
-
List tasks to a text file (quick snapshot):
Get-ScheduledTask | Format-Table -AutoSize | Out-File “$([Environment]::GetFolderPath(‘Desktop’))\Scheduled_Tasks.txt” — example from Winaero: https://winaero.com/export-scheduled-tasks/ -
Export tasks to XML (bulk): use Export-ScheduledTask in a loop, then import with schtasks /create /xml. The WindowsClub shows useful examples for bulk export/import: https://www.thewindowsclub.com/import-or-export-tasks-from-task-scheduler
-
Export only disabled tasks (so you can re-disable them on target): community examples use a filter for State = ‘Disabled’ and export a CSV reference (see ElevenForum / Winaero examples): https://www.elevenforum.com/t/export-list-of-scheduled-tasks-in-windows-11.24326/ and https://winaero.com/export-scheduled-tasks/
Important notes:
- Task XMLs may reference local paths, accounts, or machine-specific resources. When a task uses a specific user account, you’ll be asked for the password when importing unless the task runs as SYSTEM.
- After importing XMLs, explicitly disable the tasks that must be disabled to guarantee state (Disable-ScheduledTask) — this is a safe final step.
What to back up — what is safe and what to avoid
Do back up:
- A CSV of service names + StartMode (easy to review & reapply).
- Per-service registry subkeys for custom services you control, if you understand the service and its dependencies.
- Task XML files for each scheduled task you want to copy.
- A reference list: DisabledServices.txt and DisabledTasks.csv so you can reapply only the changes you need.
Avoid or use extreme caution with:
- Importing the entire HKLM\SYSTEM\CurrentControlSet\Services registry key on a different machine — this can overwrite driver/service settings and break the OS or hardware.
- Blindly importing tasks that run as domain users without having passwords; the import may fail or the task may be re-created but non-functional.
- Changing Boot/System driver start types (Start value 0 or 1) unless you know what you’re doing.
Other caveats:
- Group Policy can reset startup types; if the target is domain-joined, check GPOs.
- Service credentials: registry export may show the account name in ObjectName, but passwords are not exportable — you’ll need to set them on the target.
- Test on a VM before applying to production.
Step-by-step scripts you can copy (PowerShell + reg + schtasks)
All scripts assume you run PowerShell as Administrator.
A. Export disabled services from System 1 (safe CSV + per-service .reg copies)
# Run on System 1 (source)
$backupDir = "C:\Backup\Services"
New-Item -Path $backupDir -ItemType Directory -Force
# Export a CSV of Name + StartMode (safe, reviewable)
Get-CimInstance -ClassName Win32_Service |
Select-Object Name, StartMode |
Export-Csv -Path "$backupDir\ServicesStartMode.csv" -NoTypeInformation
# Optional: export only disabled services to text
Get-CimInstance -ClassName Win32_Service |
Where-Object { $_.StartMode -eq 'Disabled' } |
Select-Object -ExpandProperty Name |
Out-File "$backupDir\DisabledServices.txt"
# Optional: export each disabled service registry subkey (more complete)
foreach ($s in Get-Content "$backupDir\DisabledServices.txt") {
$out = Join-Path $backupDir ($s + ".reg")
reg export "HKLM\SYSTEM\CurrentControlSet\Services$s" $out /y
}
Reference: registry export approach explained at https://www.jamesparker.dev/how-do-i-back-up-windows-service-configurations/ and community notes at https://serverfault.com/questions/867412/backup-and-restore-a-windows-service.
B. Restore service start types on System 2 (target) using CSV (safe)
# Run on System 2 (target)
$csv = Import-Csv "C:\Backup\Services\ServicesStartMode.csv"
foreach ($row in $csv) {
$name = $row.Name
# map Win32 StartMode to Set-Service acceptable param
$startup = switch ($row.StartMode) {
'Auto' { 'Automatic' }
'Automatic' { 'Automatic' }
'Manual' { 'Manual' }
'Disabled' { 'Disabled' }
default { $row.StartMode }
}
if (Get-Service -Name $name -ErrorAction SilentlyContinue) {
try {
Set-Service -Name $name -StartupType $startup -ErrorAction Stop
Write-Host "Set $name -> $startup"
} catch {
Write-Warning "Could not set $name: $_"
}
} else {
Write-Warning "Service $name not found on this machine"
}
}
If Set-Service is not available for a particular startup value, you can use:
sc.exe config "ServiceName" start= disabled
(note the space after start=).
C. Export Task Scheduler tasks (System 1)
# Run on System 1 (source)
$taskBackup = "C:\Backup\ScheduledTasks"
New-Item -Path $taskBackup -ItemType Directory -Force
# Bulk export all tasks to XML
Get-ScheduledTask | ForEach-Object {
$safePath = ($_.TaskPath.Trim('\') -replace '\\','_')
$filename = "$safePath`_$($_.TaskName).xml"
Export-ScheduledTask -TaskName $_.TaskName -TaskPath $_.TaskPath |
Out-File -FilePath (Join-Path $taskBackup $filename) -Encoding UTF8
}
# Export list of disabled tasks (reference)
Get-ScheduledTask | Where-Object { $_.State -eq 'Disabled' } |
Select-Object TaskName, TaskPath |
Export-Csv -Path (Join-Path $taskBackup "DisabledTasks.csv") -NoTypeInformation
See the Task Scheduler export methods at https://www.thewindowsclub.com/import-or-export-tasks-from-task-scheduler and examples at https://winaero.com/export-scheduled-tasks/.
D. Import tasks and re-apply disabled state on System 2
# Copy the XML files and DisabledTasks.csv to System 2\C:\Backup\ScheduledTasks
$taskBackup = "C:\Backup\ScheduledTasks"
# Import each XML (using schtasks for simplicity)
Get-ChildItem -Path $taskBackup -Filter *.xml | ForEach-Object {
$xml = $_.FullName
# derive a task name or use the XML's Task name; here we use the file name as TN
$tn = $_.BaseName
schtasks /Create /TN $tn /XML $xml /F
}
# Re-disable tasks that should be disabled (use the CSV reference)
Import-Csv (Join-Path $taskBackup "DisabledTasks.csv") | ForEach-Object {
try {
Disable-ScheduledTask -TaskName $_.TaskName -TaskPath $_.TaskPath -ErrorAction Stop
} catch {
Write-Warning "Could not disable task $($_.TaskPath)$($_.TaskName): $_"
}
}
If tasks run under specific user accounts you’ll be prompted for passwords during import or you can pass credentials to schtasks when creating the task (note security risks when scripting passwords).
Verification and troubleshooting
Quick checks after import:
- Services: run
Get-CimInstance Win32_Service | Where-Object { $_.StartMode -eq 'Disabled' } | Format-Table Name, StartMode
and compare to your DisabledServices.txt or ServicesStartMode.csv.
- Tasks: run
Get-ScheduledTask | Where-Object { $_.State -eq 'Disabled' } | Format-Table TaskPath, TaskName
and compare to DisabledTasks.csv.
Common problems and fixes:
- Task import fails due to missing account password: re-register the task specifying /RU and /RP, or edit the task in Task Scheduler UI and supply credentials. See TheWindowsClub guide for import options: https://www.thewindowsclub.com/import-or-export-tasks-from-task-scheduler.
- Service not found on target: skip it (log the difference) or install the service application first.
- Registry import caused unexpected driver/service mismatch: restore the registry backup you took first, and revert (do NOT import a full Services key into a dissimilar machine). Community caution on registry restore is discussed at https://serverfault.com/questions/867412/backup-and-restore-a-windows-service.
- If a service uses a custom account, passwords are not preserved — use sc.exe config to set them or re-enter in the Services UI.
Monitoring and logs:
- Check Event Viewer → System and Task Scheduler operational log if tasks don’t run.
- Use sc query and Get-Service/Get-CimInstance for service state details.
Sources
- https://www.jamesparker.dev/how-do-i-back-up-windows-service-configurations/
- https://winaero.com/export-scheduled-tasks/
- https://serverfault.com/questions/867412/backup-and-restore-a-windows-service
- https://www.winhelponline.com/blog/backup-windows-services-configuration/
- https://www.elevenforum.com/t/export-list-of-scheduled-tasks-in-windows-11.24326/
- https://www.thewindowsclub.com/import-or-export-tasks-from-task-scheduler
Conclusion
Backup Windows services and Task Scheduler tasks by exporting service start settings (CSV or per-service registry keys) and exporting task XMLs, transfer those files to the target Windows 11 machine, then reapply startup types and import tasks — finally enforce disabled states with Set-Service / sc.exe and Disable-ScheduledTask so System 2 matches System 1. Test the full procedure on a VM first, run everything elevated, and re-enter any service/task credentials on the target as needed.