Private/Invoke-WUTroubleshooter.ps1
function Invoke-WUTroubleshooter { <# .SYNOPSIS Runs the Windows Update troubleshooting pack to automatically fix common issues. .DESCRIPTION Executes the built-in Windows Update troubleshooting pack to detect and resolve common Windows Update problems using Microsoft's automated troubleshooting framework. .PARAMETER LogPath Path to the log file for detailed logging. .EXAMPLE $result = Invoke-WUTroubleshooter -LogPath "C:\Logs\wu.log" .NOTES This is a private function used internally by the WindowsUpdateTools module. Requires TroubleshootingPack module to be available on the system. Returns an object with Success, IssuesResolved, and ActionsPerformed properties. #> [CmdletBinding()] param( [string]$LogPath ) $result = [PSCustomObject]@{ Success = $false IssuesResolved = 0 ActionsPerformed = @() } try { Write-WULog -Message "Running Windows Update troubleshooter..." -LogPath $LogPath # Check if troubleshooting pack module is available if (Get-Module -ListAvailable -Name TroubleshootingPack) { Import-Module TroubleshootingPack -ErrorAction Stop # Get Windows Update troubleshooting pack $updatePackPath = "$env:SystemRoot\diagnostics\system\WindowsUpdate" if (Test-Path $updatePackPath) { Write-WULog -Message "Found Windows Update troubleshooting pack" -LogPath $LogPath $updatePack = Get-TroubleshootingPack $updatePackPath $troubleshootResult = Invoke-TroubleshootingPack -Pack $updatePack -Unattended Write-WULog -Message "Windows Update troubleshooter completed" -LogPath $LogPath $result.ActionsPerformed += "Windows Update troubleshooter executed" # Process troubleshooter results if ($troubleshootResult -and $troubleshootResult.Result) { $result.IssuesResolved += ($troubleshootResult.Result | Where-Object { $_.Status -eq 'Fixed' }).Count } $result.Success = $true } else { Write-WULog -Message "Windows Update troubleshooting pack not found" -Level Warning -LogPath $LogPath } } else { Write-WULog -Message "TroubleshootingPack module not available" -Level Warning -LogPath $LogPath } } catch { Write-WULog -Message "Failed to run Windows Update troubleshooter: $($_.Exception.Message)" -Level Warning -LogPath $LogPath } return $result } |