After the upgrade completes, verify all services and roles are functioning correctly. This step is crucial to ensure business continuity.
Check all installed Windows features are still present:
Compare-Object (Get-Content C:\Temp\installed-features.txt) (Get-WindowsFeature | Where-Object InstallState -eq "Installed" | Select-Object -ExpandProperty Name)
Verify critical services are running:
$CriticalServices = @("Spooler", "DHCP", "DNS", "W32Time", "EventLog")
foreach ($Service in $CriticalServices) {
$Status = Get-Service -Name $Service -ErrorAction SilentlyContinue
if ($Status) {
Write-Host "$Service`: $($Status.Status)"
}
}
Test network connectivity and domain membership:
Test-ComputerSecureChannel -Verbose
nltest /dsgetdc:$env:USERDNSDOMAIN
Clean up upgrade files to free disk space:
Dism /online /Cleanup-Image /StartComponentCleanup /ResetBase
Cleanmgr /sagerun:1
Update Windows and install latest drivers:
Get-WUInstall -AcceptAll -Install
Get-WmiObject Win32_PnPEntity | Where-Object{$_.ConfigManagerErrorCode -ne 0} | Select-Object Name, DeviceID
Pro tip: Keep the system backup for at least 30 days after upgrade. This gives you time to identify any delayed issues that might require rollback.
Document the successful upgrade:
$UpgradeLog = @{
"UpgradeDate" = Get-Date
"SourceVersion" = "Previous version from documentation"
"TargetVersion" = (Get-WmiObject Win32_OperatingSystem).Caption
"UpgradeMethod" = "In-place upgrade"
}
$UpgradeLog | ConvertTo-Json | Out-File -FilePath C:\Temp\upgrade-log.json