WindowsUpdateTools
1.8.2
Enterprise Windows Update diagnostics and guarded remediation with bounded WUA searches, Intune/Windows Autopatch orchestration awareness, SetupDiag integration, and structured health reporting.
Minimum PowerShell version
5.1
Installation Options
Owners
Copyright
(c) 2025 CSOLVE. All rights reserved.
Package Details
Author(s)
- Anthony Balloi - CSOLVE Alex Appleton - CSOLVE
Tags
WindowsUpdate Remediation Diagnostics Enterprise Intune Autopatch WindowsUpdateForBusiness SCCM SetupDiag Windows10 Windows11 WSUS Troubleshooting Automation SystemAdmin
Functions
Test-WindowsUpdateHealth Repair-WindowsUpdate Invoke-BuildUpgrade Get-BuildUpgradeStatus Get-UpdateFailureReport Get-ServicingDiagnostics Install-WindowsUpdate Get-Windows11ISO Invoke-ComponentStoreRepairWithISO Debug-WindowsUpdateAgent Get-PendingUpdates Get-WUHResultDescription Get-UpdateConfiguration
PSEditions
Dependencies
This module has no dependencies.
Release Notes
New in 1.8.2:
- **Gallery package import fix**: Converted the zero-byte public Get-WUHResultDescription placeholder into a non-empty export marker. PowerShell Gallery omits empty files, which made the published 1.8.1 manifest reference a missing path even though the real private implementation was present.
New in 1.8.1:
- **ISO wrapper edition fix**: Get-Windows11ISO now translates the public Pro edition value to the Professional value required by the private Fido downloader.
- **Safe private invocation**: Get-Windows11ISO now passes only parameters declared by the private downloader instead of splatting public-only parameters.
- **ISO download file logging**: -LogPath now scopes private downloader/helper logging to the requested file without leaking that setting into unrelated module calls.
New in 1.8.0:
- **Bounded WUA diagnostics**: Pending-update searches run in an isolated process with a configurable hard timeout, preventing an unhealthy Windows Update Agent from hanging the parent diagnostic indefinitely.
- **Explicit scan outcome**: Test-WindowsUpdateHealth reports Completed, TimedOut, Failed, or Skipped instead of treating a failed scan as zero pending updates.
- **Cloud orchestration awareness**: Configuration output distinguishes confirmed endpoint evidence from Autopatch status that requires authoritative Intune/Graph validation.
- **Policy-scoped reporting**: WUA results are labeled as policy-scoped and cannot be misread as bypassing approvals, rollout timing, safeguard holds, or scan-source policy.
- **Safe mutation defaults**: Local WUA installs, feature upgrades, and policy-disruptive repairs are blocked by default when Intune/WUfB enrollment is detected. Expert operators can use -OverrideCloudOrchestration after validating the cloud deployment and maintenance window.
- **Import repair**: Fixed the unmatched ISO download block in Invoke-BuildUpgrade that prevented version 1.7.9 from importing.
- **Output fixes**: Pending update objects now consistently include type, KB IDs, security bulletin IDs, normalized size, and scan scope.
CRITICAL BUG FIX with 1.7.9:
- **FIXED: ISOUrl Using Wrong ISO**: When -ISOUrl parameter was specified, the code incorrectly used any existing Win11*.iso file instead of downloading/using the specified URL
- **Root Cause**: Code checked for existing ISOs BEFORE checking if ISOUrl was provided, causing Enterprise ISOs to be ignored when consumer ISOs existed
- **Fix**: When -ISOUrl is provided, only use ISO matching that specific filename (skip generic Win11*.iso search)
- **Improved Existing ISO Detection**: Pattern now includes SW_DVD9 prefix for Enterprise ISOs
- **Better Logging**: Now logs "ISO Source: Custom URL - [url]" when using ISOUrl parameter
- **FIXED: UseGetUrl Backwards Compatibility**: Invoke-BuildUpgrade now checks if Get-WUWindows11ISO supports UseGetUrl parameter before using it
Bug Fix with 1.7.8:
- **FIXED: Duplicate Profile Detection from SetupDiag Results**: Now detects duplicate profile issues from SetupDiag's own FailureReasons array
- **Complete Coverage**: Duplicate profile detection now works from three sources: SetupDiag results, direct log analysis enhancement, and fallback analysis
- **Improved Accuracy**: SID extraction using regex matches to capture all affected profile SIDs from SetupDiag output
Bug Fix with 1.7.7:
- **FIXED: Fallback Analysis Missing Errors**: Get-WUSetupLogsDirect now includes AdditionalErrors from diagerr.xml for duplicate profile detection
- **FIXED: Duplicate Profile Detection in Fallback Scenario**: Detection now works when SetupDiag fails and direct log analysis is used
- **Complete Fix**: Duplicate profile issues now properly detected and displayed in recommendations regardless of SetupDiag success/failure
Bug Fix with 1.7.6:
- **FIXED: Duplicate Profile Recommendations Not Displayed**: Critical and Warning issue remediation now properly shows duplicate profile cleanup recommendations
- **FIXED: Fallback Analysis Missing Errors**: Get-WUSetupLogsDirect now includes AdditionalErrors from diagerr.xml for duplicate profile detection
- **FIXED: Duplicate Profile Detection in Fallback Scenario**: Detection now works when SetupDiag fails and direct log analysis is used
- **Enhanced Output**: Duplicate profile issues now display affected SID count and clear remediation steps in both SetupDiag and fallback scenarios
- **Improved User Experience**: Test-WindowsUpdateHealth now correctly highlights duplicate profile issues blocking upgrades regardless of analysis method
New Feature with 1.7.5:
- **NEW: Duplicate Profile Registry Detection**: Automatically detects orphaned user profile SIDs that block Windows upgrades
- **Resolve-WUDuplicateProfiles**: New function to remove duplicate Administrator profile registry entries
- **Error 0x8007001F / 0x000004E5 Resolution**: Fixes "Duplicate profile detected" errors from domain/workgroup changes
- **Enhanced Test-WindowsUpdateHealth**: Now detects duplicate profile issues in SetupDiag analysis
- **Repair-WindowsUpdate -DuplicateProfiles**: New switch to clean up orphaned profile SIDs
- **Automatic Remediation**: Identifies active vs. orphaned SIDs and safely removes conflicts
New Feature with 1.7.1:
- **NEW: Get-BuildUpgradeStatus** - Monitor active Windows build upgrade progress in real-time
- **Progress Tracking**: Shows percentage complete, current stage, and runtime
- **Detailed Mode**: View recent setup log entries with -Detailed parameter
- **Follow Mode**: Continuously monitor with -Follow parameter (auto-refresh every 10 seconds)
- **Error Detection**: Automatically shows recent errors if detected during upgrade
CRITICAL FIX with 1.7.0:
- **FIXED: Incorrect EULA Parameter**: Changed from `/AcceptEula` to `/EULA accept` per Microsoft documentation
- **Resolves Setup Hang Issue**: Setup was waiting for EULA acceptance with incorrect parameter format
- **Windows 11 Requirement**: `/EULA accept` is mandatory for Windows 11 silent upgrades (returns 0xC190010E if missing)
- **Proper Parameter Order**: Moved EULA acceptance before other parameters for better compatibility
- **Reference**: https://learn.microsoft.com/en-us/windows-hardware/manufacture/desktop/windows-setup-command-line-options
Critical Fix with 1.6.9:
- **FIXED: ISO Upgrade EULA Acceptance**: Added missing /AcceptEula parameter to setup.exe command for automated upgrades
- **Resolved Error 0xC190010E**: Fixes "User did not accept EULA at downlevel OS" error that caused silent upgrades to fail
- **Enhanced Unattended Installation**: Both ISO-based and upgrade assistant methods now properly accept EULA automatically
- **Improved Reliability**: Unattended Windows 11 upgrades now complete without waiting for user interaction
Fix with 1.5.84:
- **FIXED: Incorrect OS Build Number Detection**: After Windows 11 feature updates, WMI can report stale build numbers. Now uses registry CurrentBuild which is always accurate
- **Added FullBuildVersion**: Reports complete version string with UBR (e.g., 26200.7171) matching Defender/Intune reporting
- **Added DisplayVersion**: Shows friendly version name (e.g., 25H2) in diagnostics
- **Exported Missing Functions**: Get-PendingUpdates and Get-WUHResultDescription now properly exported
Critical Fix with 1.5.38:
- **RESOLVED: Invalid Windows language provided error**: Fixed language mapping conversion from system locale codes (like 'en-us') to Fido language names (like 'English International')
- **Comprehensive Language Support**: Added complete language mapping based on official Fido repository analysis covering 40+ languages
- **Enhanced ISO Download Reliability**: Windows 11 ISO downloads now work correctly for all supported system locales
- **Better Language Detection**: Improved automatic language detection with proper Fido format conversion
Historical release notes before 1.5.38 are omitted from the Gallery manifest to remain within Gallery metadata limits.
FileList
- WindowsUpdateTools.nuspec
- README.md
- Private\Format-WUResult.ps1
- Private\Get-WUSystemInfo.ps1
- Private\Invoke-WUAutoRepair.ps1
- Private\New-WUHealthIssue.ps1
- Private\Resolve-WUGenericErrors.ps1
- Private\Write-WULog.ps1
- Public\Get-Windows11ISO.ps1
- Private\Get-WUConfiguration.ps1
- Private\Get-WUUpdateHistory.ps1
- Private\Invoke-WUComprehensiveRemediation.ps1
- Private\Remove-WUProblematicDrivers.ps1
- Private\Resolve-WUSystemPartition.ps1
- Public\Debug-WindowsUpdateAgent.ps1
- Public\Get-WUHResultDescription.ps1
- WindowsUpdateTools.psd1
- Private\Get-WUEventLogs.ps1
- Private\Get-WUWindows11ISO-Enhanced.ps1
- Private\Invoke-WUDriverUpdate.ps1
- Private\Resolve-WUAppraiserIssues.ps1
- Private\Resolve-WUWSUSIssues.ps1
- Public\Get-BuildUpgradeStatus.ps1
- Public\Install-WindowsUpdate.ps1
- WindowsUpdateTools.psm1
- Private\Get-WUHResultDescription.ps1
- Private\Get-WUWindows11ISO-Original-Backup.ps1
- Private\Invoke-WUEnhancedDiskCleanup.ps1
- Private\Resolve-WUComponentStore.ps1
- Private\Test-WUCOMObject.ps1
- Public\Get-PendingUpdates.ps1
- Public\Invoke-BuildUpgrade.ps1
- Private\Assert-WUManualUpdateActionAllowed.ps1
- Private\Get-WUPendingUpdates.ps1
- Private\Get-WUWindows11ISO-PS51.ps1
- Private\Invoke-WUSearch.ps1
- Private\Resolve-WUDriverDetails.ps1
- Private\Test-WUComponentStore.ps1
- Public\Get-ServicingDiagnostics.ps1
- Public\Invoke-ComponentStoreRepairWithISO.ps1
- Private\Clear-WUUpgradeBlockingRegistry.ps1
- Private\Get-WUSetupLogsDirect.ps1
- Private\Get-WUWindows11ISO.ps1
- Private\Invoke-WUSetupDiag.ps1
- Private\Resolve-WUDuplicateProfiles.ps1
- Private\Test-WUServices.ps1
- Public\Get-UpdateConfiguration.ps1
- Public\Repair-WindowsUpdate.ps1
- Private\Format-WUResult-New.ps1
- Private\Get-WUSystemHealth.ps1
- Private\Install-WUServicingStackUpdate.ps1
- Private\Invoke-WUTroubleshooter.ps1
- Private\Resolve-WUDynamicUpdatesIssues.ps1
- Private\Test-WUWindows11Compatibility.ps1
- Public\Get-UpdateFailureReport.ps1
- Public\Test-WindowsUpdateHealth.ps1
- Private\Format-WUResult-PS51.ps1