What are the supported Windows Server upgrade paths in 2026?
Planning a Windows Server upgrade requires understanding Microsoft's supported upgrade paths and following a systematic approach. With Windows Server 2025 now available, Microsoft has expanded in-place upgrade options, allowing jumps of up to four versions in some cases. However, not all upgrade paths are supported, and attempting unsupported upgrades will result in failure.
This comprehensive guide walks you through the entire process, from initial planning to post-upgrade verification, ensuring your server upgrade succeeds without data loss or extended downtime.
How do I determine my current Windows Server version and upgrade options?
Before planning any upgrade, you need to accurately identify your current Windows Server version and understand which upgrade paths are available. Microsoft maintains strict compatibility matrices that determine supported upgrade scenarios.
Start by documenting your current system configuration. Open PowerShell as Administrator and run these commands to capture essential system information:
Get-ComputerInfo -Property WindowsBuildLabEx,WindowsEditionID,TotalPhysicalMemory | Out-File -FilePath C:\Temp\computerinfo.txt
systeminfo.exe | Out-File -FilePath C:\Temp\systeminfo.txt
ipconfig /all | Out-File -FilePath C:\Temp\ipconfig.txt
Get-WindowsFeature | Where-Object InstallState -eq "Installed" | Out-File -FilePath C:\Temp\installed-features.txtNext, identify your exact Windows Server version:
$OS = Get-WmiObject -Class Win32_OperatingSystem
Write-Host "Current Version: $($OS.Caption)"
Write-Host "Build Number: $($OS.BuildNumber)"
Write-Host "Edition: $($OS.OperatingSystemSKU)"The upgrade path matrix for 2026 shows significant limitations for older versions:
| Source Version | To 2016 | To 2019 | To 2022 | To 2025 |
|---|---|---|---|---|
| 2008/2008 R2 | No | No | No | No |
| 2012 | Yes | No | No | No |
| 2012 R2 | Yes | Yes | No | Yes |
| 2016 | N/A | Yes | Yes | Yes |
| 2019 | N/A | N/A | Yes | Yes |
| 2022 | N/A | N/A | N/A | Yes |
For systems running Windows Server 2012, you must first upgrade to 2016 before proceeding to newer versions. This creates a multi-step upgrade process that requires additional planning and downtime.
What system requirements must I verify before upgrading Windows Server?
System requirements verification prevents upgrade failures and ensures optimal performance post-upgrade. Windows Server 2025 has specific hardware and software prerequisites that must be met.
Check your system's hardware specifications:
$RAM = [math]::Round((Get-CimInstance Win32_PhysicalMemory | Measure-Object -Property capacity -Sum).sum /1gb,2)
$CPU = Get-WmiObject -Class Win32_Processor | Select-Object Name, NumberOfCores, NumberOfLogicalProcessors
$Disk = Get-WmiObject -Class Win32_LogicalDisk -Filter "DriveType=3" | Select-Object Size,FreeSpace
Write-Host "RAM: $RAM GB (Minimum: 2GB for Desktop Experience, 512MB for Core)"
Write-Host "CPU: $($CPU.Name) - Cores: $($CPU.NumberOfCores), Logical: $($CPU.NumberOfLogicalProcessors)"
foreach($Drive in $Disk) {
$FreeGB = [math]::Round($Drive.FreeSpace /1GB,2)
$TotalGB = [math]::Round($Drive.Size /1GB,2)
Write-Host "Drive Space: $FreeGB GB free of $TotalGB GB total (Minimum: 32GB required)"
}Verify licensing requirements. Windows Server upgrades require valid Software Assurance or equivalent licensing:
$LicenseStatus = Get-CimInstance -ClassName SoftwareLicensingProduct | Where-Object {$_.PartialProductKey -and $_.Name -like "*Windows Server*"}
$LicenseStatus | Select-Object Name, LicenseStatus, GracePeriodRemainingCheck for incompatible software or roles that might block the upgrade:
Get-WindowsFeature | Where-Object InstallState -eq "Installed" | Select-Object Name, InstallState
Get-WmiObject -Class Win32_Product | Where-Object Name -like "*antivirus*" | Select-Object Name, VersionHow do I prepare my Windows Server system for upgrade?
Proper system preparation significantly reduces upgrade failure risk and ensures faster recovery if issues occur. This phase involves updating the current system, creating backups, and preparing installation media.
Start by installing all available Windows Updates. Outdated systems frequently experience upgrade failures:
Install-Module PSWindowsUpdate -Force -Scope CurrentUser
Import-Module PSWindowsUpdate
Get-WUInstall -AcceptAll -AutoRebootCreate comprehensive system backups using Windows Server Backup:
Import-Module WindowsServerBackup
$Policy = New-WBPolicy
$BackupLocation = New-WBBackupTarget -VolumePath "E:\"
Add-WBBackupTarget -Policy $Policy -Target $BackupLocation
$SystemVolume = Get-WBVolume -VolumePath "C:\"
Add-WBVolume -Policy $Policy -Volume $SystemVolume
Start-WBBackup -Policy $PolicyFor virtualized environments, create VM snapshots as an additional safety measure:
# For Hyper-V environments
Checkpoint-VM -Name "YourServerName" -SnapshotName "Pre-Upgrade-$(Get-Date -Format 'yyyy-MM-dd-HHmm')"
# Verify snapshot creation
Get-VMSnapshot -VMName "YourServerName" | Select-Object Name, CreationTimeDownload the Windows Server 2025 ISO from the Microsoft Volume Licensing Service Center. Mount and verify the installation media:
$ISOPath = "C:\Downloads\WindowsServer2025.iso"
$MountResult = Mount-DiskImage -ImagePath $ISOPath -PassThru
$DriveLetter = ($MountResult | Get-Volume).DriveLetter
Write-Host "ISO mounted to drive: $DriveLetter"
# Verify setup files
$SetupPath = "${DriveLetter}:\\setup.exe"
if (Test-Path $SetupPath) {
$FileVersion = (Get-ItemProperty $SetupPath).VersionInfo.FileVersion
Write-Host "Setup version: $FileVersion"
dism /Get-WimInfo /WimFile:"${DriveLetter}:\\sources\\install.wim"
}What is the step-by-step process for executing a Windows Server in-place upgrade?
The in-place upgrade process requires careful execution and monitoring. Unlike clean installations, in-place upgrades preserve your existing configuration, applications, and data while updating the underlying operating system.
Launch the upgrade process from the mounted ISO with administrative privileges:
Start-Process -FilePath "${DriveLetter}:\\setup.exe" -Verb RunAsDuring the setup wizard, make these critical selections:
- Product Key: Enter your Windows Server 2025 license key
- Edition Selection: Choose the same edition as your current installation (Standard/Datacenter)
- Installation Type: Select "Keep personal files, apps, and Windows settings"
- Updates: Choose "Download and install updates (recommended)"
Monitor the upgrade progress throughout the process. The system will reboot multiple times, and you can check status after each restart:
Get-ItemProperty "HKLM:SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Setup\\State" | Select-Object ImageState
# IMAGE_STATE_COMPLETE indicates successful completionTrack upgrade phases using the setup log files:
Get-Content "C:\\Windows\\Panther\\setupact.log" | Select-Object -Last 20
# Monitor for error messages or completion statusFor multi-step upgrades (such as 2012 R2 → 2016 → 2025), repeat this process for each hop. Allow the system to fully stabilize between upgrades and verify functionality before proceeding to the next version.
How do I verify and troubleshoot post-upgrade issues?
Post-upgrade verification ensures all services, roles, and applications function correctly in the new environment. This phase identifies issues early and provides opportunity for remediation before users are affected.
Verify the upgrade completed successfully:
$OS = Get-WmiObject -Class Win32_OperatingSystem
Write-Host "New Version: $($OS.Caption)"
Write-Host "Build Number: $($OS.BuildNumber)"
Write-Host "Install Date: $($OS.InstallDate)"
winver # Opens version dialogCompare installed Windows features before and after upgrade:
$PreUpgradeFeatures = Get-Content C:\\Temp\\installed-features.txt
$PostUpgradeFeatures = Get-WindowsFeature | Where-Object InstallState -eq "Installed" | Select-Object -ExpandProperty Name
$MissingFeatures = Compare-Object $PreUpgradeFeatures $PostUpgradeFeatures | Where-Object SideIndicator -eq "<="
if ($MissingFeatures) {
Write-Host "Missing features detected:" -ForegroundColor Red
$MissingFeatures.InputObject
}Test critical system services and network connectivity:
# Check critical services
$CriticalServices = @("Spooler", "DHCP", "DNS", "W32Time", "EventLog", "Netlogon")
foreach ($Service in $CriticalServices) {
$Status = Get-Service -Name $Service -ErrorAction SilentlyContinue
if ($Status) {
Write-Host "$Service: $($Status.Status)" -ForegroundColor $(if($Status.Status -eq "Running"){"Green"}else{"Red"})
}
}
# Test domain connectivity
Test-ComputerSecureChannel -Verbose
nltest /dsgetdc:$env:USERDNSDOMAINClean up upgrade files and optimize system performance:
# Remove old Windows installation files
Dism /online /Cleanup-Image /StartComponentCleanup /ResetBase
# Run disk cleanup
Cleanmgr /sagerun:1
# Check disk space recovery
Get-WmiObject -Class Win32_LogicalDisk -Filter "DriveType=3" | Select-Object @{Name="Drive";Expression={$_.DeviceID}}, @{Name="FreeSpace(GB)";Expression={[math]::Round($_.FreeSpace/1GB,2)}}Install latest updates and drivers for the new operating system:
Get-WUInstall -AcceptAll -Install
# Check for hardware issues
Get-WmiObject Win32_PnPEntity | Where-Object{$_.ConfigManagerErrorCode -ne 0} | Select-Object Name, DeviceIDDocument the successful upgrade for future reference and compliance:
$UpgradeLog = @{
"UpgradeDate" = Get-Date
"SourceVersion" = "Document from pre-upgrade capture"
"TargetVersion" = (Get-WmiObject Win32_OperatingSystem).Caption
"UpgradeMethod" = "In-place upgrade"
"DowntimeHours" = "Document actual downtime"
"IssuesEncountered" = "List any problems resolved"
}
$UpgradeLog | ConvertTo-Json | Out-File -FilePath C:\\Temp\\upgrade-log.jsonThis systematic approach to Windows Server upgrades minimizes risk while ensuring successful migration to newer operating system versions. Following these procedures and verification steps provides confidence in your upgraded environment and maintains business continuity throughout the process.



