WindowsUpdateTools.psd1

#
# Module manifest for module 'WindowsUpdateTools'
#
# Generated by: Anthony Balloi - CSOLVE
#
# Generated on: 6/16/2025
#

@{

# Script module or binary module file associated with this manifest.
RootModule = 'WindowsUpdateTools.psm1'

# Version number of this module.
ModuleVersion = '1.5.89'

# Supported PSEditions
CompatiblePSEditions = @('Desktop', 'Core')

# ID used to uniquely identify this module
GUID = 'a8f8e8d0-4c1e-4b2f-9a3d-1e5f7c9b2a4d'

# Author of this module
Author = 'Anthony Balloi - CSOLVE, Alex Appleton - CSOLVE'

# Company or vendor of this module
CompanyName = 'CSOLVE'

# Copyright statement for this module
Copyright = '(c) 2025 CSOLVE. All rights reserved.'

# Description of the functionality provided by this module
Description = 'Comprehensive PowerShell module for diagnosing, analyzing, and remediating Windows Update issues in enterprise environments. Includes SetupDiag integration, automated remediation, and detailed health reporting.'

# Minimum version of the PowerShell engine required by this module
PowerShellVersion = '5.1'

# Name of the PowerShell host required by this module
# PowerShellHostName = ''

# Minimum version of the PowerShell host required by this module
# PowerShellHostVersion = ''

# Minimum version of Microsoft .NET Framework required by this module. This prerequisite is valid for the PowerShell Desktop edition only.
DotNetFrameworkVersion = '4.7.2'

# Minimum version of the common language runtime (CLR) required by this module. This prerequisite is valid for the PowerShell Desktop edition only.
# ClrVersion = ''

# Processor architecture (None, X86, Amd64) required by this module
ProcessorArchitecture = 'None'

# Modules that must be imported into the global environment prior to importing this module
# RequiredModules = @()

# Assemblies that must be loaded prior to importing this module
# RequiredAssemblies = @()

# Script files (.ps1) that are run in the caller's environment prior to importing this module.
# ScriptsToProcess = @()

# Type files (.ps1xml) to be loaded when importing this module
# TypesToProcess = @()

# Format files (.ps1xml) to be loaded when importing this module
# FormatsToProcess = @()

# Modules to import as nested modules of the module specified in RootModule/ModuleToProcess
# NestedModules = @()

# Functions to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no functions to export.
FunctionsToExport = @(
    'Test-WindowsUpdateHealth',
    'Repair-WindowsUpdate',
    'Invoke-BuildUpgrade',
    'Get-UpdateFailureReport',
    'Get-ServicingDiagnostics',
    'Install-WindowsUpdate',
    'Get-Windows11ISO',
    'Invoke-ComponentStoreRepairWithISO',
    'Debug-WindowsUpdateAgent',
    'Get-PendingUpdates',
    'Get-WUHResultDescription'
)

# Cmdlets to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no cmdlets to export.
CmdletsToExport = @()

# Variables to export from this module
VariablesToExport = @(
    'ExitCodes'
)

# Aliases to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no aliases to export.
AliasesToExport = @(
    'Test-WUHealth',
    'Repair-WU',
    'Get-UpdateFailure'
)

# DSC resources to export from this module
# DscResourcesToExport = @()

# List of all modules packaged with this module
# ModuleList = @()

# List of all files packaged with this module
FileList = @(
    'WindowsUpdateTools.psm1',
    'WindowsUpdateTools.psd1',
    'Public\Test-WindowsUpdateHealth.ps1',
    'Public\Repair-WindowsUpdate.ps1',
    'Public\Invoke-BuildUpgrade.ps1',
    'Public\Get-UpdateFailureReport.ps1',
    'Public\Get-ServicingDiagnostics.ps1',
    'Public\Install-WindowsUpdate.ps1',
    'Private\Write-WULog.ps1',
    'Private\Get-WUSystemInfo.ps1',
    'Private\Test-WUServices.ps1',
    'Private\Get-WUEventLogs.ps1',
    'Private\Test-WUComponentStore.ps1',
    'Private\Resolve-WUSystemPartition.ps1',
    'Private\Resolve-WUGenericErrors.ps1',
    'Private\Invoke-WUComprehensiveRemediation.ps1',
    'Private\Remove-WUProblematicDrivers.ps1',
    'Private\Clear-WUUpgradeBlockingRegistry.ps1',
    'Private\Invoke-WUEnhancedDiskCleanup.ps1',
    'Private\Resolve-WUWSUSIssues.ps1',
    'Private\Invoke-WUTroubleshooter.ps1',
    'Private\Invoke-WUSetupDiag.ps1',
    'Private\New-WUHealthIssue.ps1',
    'Private\Get-WUConfiguration.ps1',
    'Private\Get-WUPendingUpdates.ps1',
    'Private\Get-WUSystemHealth.ps1',
    'Private\Get-WUUpdateHistory.ps1',
    'Private\Resolve-WUComponentStore.ps1',
    'Private\Test-WUWindows11Compatibility.ps1',
    'Private\Resolve-WUAppraiserIssues.ps1',
    'Private\Resolve-WUDynamicUpdatesIssues.ps1',
    'Private\Get-WUSetupLogsDirect.ps1',
    'Public\Get-Windows11ISO.ps1',
    'Private\Resolve-WUDriverDetails.ps1',
    'Public\Invoke-ComponentStoreRepairWithISO.ps1',
    'Public\Debug-WindowsUpdateAgent.ps1',
    'Public\Get-PendingUpdates.ps1',
    'Public\Get-WUHResultDescription.ps1',
    'README.md'
)

# Private data to pass to the module specified in RootModule/ModuleToProcess. This may also contain a PSData hashtable with additional module metadata used by PowerShell.
PrivateData = @{

    PSData = @{

        # Tags applied to this module. These help with module discovery in online galleries.
        Tags = @(
            'WindowsUpdate',
            'Remediation', 
            'Diagnostics',
            'Enterprise',
            'Intune',
            'SCCM',
            'SetupDiag',
            'Windows10',
            'Windows11',
            'WSUS',
            'Troubleshooting',
            'Automation',
            'SystemAdmin'
        )

        # A URL to the license for this module.
        LicenseUri = 'https://github.com/YourOrg/WindowsUpdateTools/blob/main/LICENSE'

        # A URL to the main website for this project.
        ProjectUri = 'https://www.csolve.ca'

        # A URL to an icon representing this module.
        IconUri = 'https://github.com/YourOrg/WindowsUpdateTools/blob/main/icon.png'        # ReleaseNotes of this module
        ReleaseNotes = @'
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
 
New Features with 1.5.0:
- **Direct Setup Log Analysis**: New Get-WUSetupLogsDirect function provides immediate Windows 11 24H2 failure analysis without external dependencies
- **Enhanced Error Detection**: Detects 7 specific Windows 11 24H2 error patterns including TAGREF corruption, Dynamic Updates failures, and Driver Store issues
- **Fallback Analysis**: SetupDiag now falls back to direct log analysis when inconclusive or fails entirely
- **Blocking Driver Detection**: Automatically identifies and helps remove unsigned drivers blocking Windows 11 upgrades
- **Software Conflict Detection**: Detects problematic software (FolderLock, Intel DSA, etc.) that interferes with upgrades
- **Targeted Remediation**: Each detected error maps to specific remediation functions for precise fixes
- **Resolve-WUAppraiserIssues**: Fixes Appraiser compatibility database corruption (TAGREF array issues)
- **Resolve-WUDynamicUpdatesIssues**: Handles Dynamic Updates configuration failures (0x80070057) and download issues (0x80004005)
- **Registry Fixes**: Automatically applies Windows 11 24H2 compatibility registry values (CopyFileBufferedSynchronousIo)
- **New Parameters**: Test-Windowsupdate Health now supports -SkipDetailedEventLogs and -SkipPendingUpdates for faster assessments
- **Improved Logging**: Enhanced logging for better clarity on health assessments and remediation steps
- **Detailed Driver Handling**: Added detailed handling for driver signature discrepancies, including OEM driver resolution
- **Resolve-WUDriverDetails**: New function resolves OEM driver references to detailed driver information, including manufacturer, device names, and associated devices
- **Multiple Driver Resolution Methods**: Supports pnputil, Authenticode signature verification, and direct INF file parsing for comprehensive driver analysis
 
Enhanced Features with 1.5.35:
- **PowerShell 5.1 Compatible ISO Download**: Completely rebuilt Get-WUWindows11ISO function with PS 5.1 compatibility
- **Enhanced Retry Logic**: Global and method-specific retry mechanisms for Microsoft server restrictions and rate limiting
- **Improved Language Detection**: Comprehensive language mapping with 40+ supported locales and intelligent fallback
- **Automatic ISO Integration**: Component store repair now automatically downloads Windows 11 ISO when local files unavailable
- **Enhanced TLS Support**: PowerShell 5.1 compatible TLS 1.2 configuration with fallback mechanisms
- **Better Error Handling**: Simplified error handling optimized for PowerShell 5.1 execution environment
- **ISO File Verification**: Enhanced verification with multiple signature checks (ISO 9660, UDF) and size validation
- **Server Restriction Detection**: Automatic detection and handling of Microsoft download server limitations
'@


        # Prerelease string of this module
        # Prerelease = ''

        # Flag to indicate whether the module requires explicit user acceptance for install/update/save
        RequireLicenseAcceptance = $false

        # External dependent modules of this module
        # ExternalModuleDependencies = @()

    } # End of PSData hashtable

} # End of PrivateData hashtable

# HelpInfo URI of this module
HelpInfoURI = 'https://github.com/YourOrg/WindowsUpdateTools/blob/main/docs/'

# Default prefix for commands exported from this module. Override the default prefix using Import-Module -Prefix.
# DefaultCommandPrefix = ''

}