mirror of
https://github.com/zoicware/RemoveWindowsAI.git
synced 2026-03-19 17:16:19 +01:00
add windows update repair
This commit is contained in:
@@ -17,7 +17,8 @@ param(
|
||||
[switch]$revertMode,
|
||||
[switch]$backupMode,
|
||||
[ValidateSet('photoviewer', 'mspaint', 'snippingtool', 'notepad', 'photoslegacy')]
|
||||
[array]$InstallClassicApps
|
||||
[array]$InstallClassicApps,
|
||||
[switch]$RunWinUpdateRepair
|
||||
)
|
||||
|
||||
if ($nonInteractive) {
|
||||
@@ -3029,6 +3030,128 @@ function install-classicapps {
|
||||
}
|
||||
}
|
||||
|
||||
function Update-Repair {
|
||||
Write-Host 'Stopping Windows Update Services...' -ForegroundColor Green
|
||||
Stop-Service BITS -Force -ErrorAction SilentlyContinue
|
||||
Stop-Service wuauserv -Force -ErrorAction SilentlyContinue
|
||||
Stop-Service DoSvc -Force -ErrorAction SilentlyContinue
|
||||
Stop-Service UsoSvc -Force -ErrorAction SilentlyContinue
|
||||
Stop-Service WaaSMedicSvc -Force -ErrorAction SilentlyContinue
|
||||
taskkill.exe /im 'wuaucltcore.exe' /f *>$null
|
||||
taskkill.exe /im 'TiWorker.exe' /f *>$null
|
||||
Get-BitsTransfer -AllUsers | Remove-BitsTransfer
|
||||
|
||||
Write-Host 'Removing Windows Update Cache...' -ForegroundColor Green
|
||||
Remove-Item -Path "$env:windir\SoftwareDistribution" -Recurse -Force -ErrorAction SilentlyContinue
|
||||
Remove-Item -Path "$env:windir\Logs\WindowsUpdate" -Recurse -Force -ErrorAction SilentlyContinue
|
||||
reg.exe delete 'HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired' /f *>$null
|
||||
reg.exe delete 'HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\PostRebootReporting' /f *>$null
|
||||
Remove-Item "$env:ProgramData\Application Data\Microsoft\Network\Downloader\*.*" -Force -ErrorAction SilentlyContinue
|
||||
Remove-Item "$env:windir\System32\catroot2" -Force -Recurse -ErrorAction SilentlyContinue
|
||||
Rename-Item "$env:windir\WinSxS\pending.xml" -NewName 'pending.xml.old' -Force -ErrorAction SilentlyContinue
|
||||
$temp1 = "$env:windir\Temp"
|
||||
$temp2 = $tempDir
|
||||
$tempFiles = (Get-ChildItem -Path "$temp1" , "$temp2" -Recurse -Force).FullName
|
||||
foreach ($file in $tempFiles) {
|
||||
Remove-Item -Path "$file" -Recurse -Force -ErrorAction SilentlyContinue
|
||||
}
|
||||
#run disk cleanup
|
||||
$options = @(
|
||||
'Active Setup Temp Folders'
|
||||
'Delivery Optimization Files'
|
||||
'Downloaded Program Files'
|
||||
'Internet Cache Files'
|
||||
'Setup Log Files'
|
||||
'Temporary Files'
|
||||
'Windows Error Reporting Files'
|
||||
'Offline Pages Files'
|
||||
'Recycle Bin'
|
||||
'Temporary Setup Files'
|
||||
'Update Cleanup'
|
||||
'Upgrade Discarded Files'
|
||||
'Windows Defender'
|
||||
'Windows ESD installation files'
|
||||
'Windows Reset Log Files'
|
||||
'Windows Upgrade Log Files'
|
||||
'Previous Installations'
|
||||
)
|
||||
$key = 'HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches'
|
||||
foreach ($option in $options) {
|
||||
reg.exe add "$key\$option" /v StateFlags0069 /t REG_DWORD /d 00000002 /f >$null
|
||||
}
|
||||
|
||||
#credits to @instead1337 for monitoring logic
|
||||
$timeout = 600
|
||||
$cleanupProcess = Start-Process cleanmgr.exe -ArgumentList '/sagerun:69' -Wait:$false -PassThru
|
||||
$stopwatch = [System.Diagnostics.Stopwatch]::StartNew()
|
||||
$lastCpuUsage = 0
|
||||
$lastMemoryUsage = 0
|
||||
|
||||
while ($cleanupProcess -and !$cleanupProcess.HasExited -and $stopwatch.Elapsed.TotalSeconds -lt $timeout) {
|
||||
Start-Sleep -Seconds 10
|
||||
$process = Get-Process -Id $cleanupProcess.Id -EA SilentlyContinue
|
||||
if ($process) {
|
||||
$cpuUsage = $process.CPU
|
||||
$memoryUsage = $process.WS
|
||||
if ($cpuUsage -eq $lastCpuUsage -and $memoryUsage -eq $lastMemoryUsage) {
|
||||
if ($cleanupProcess.MainWindowHandle) {
|
||||
$cleanupProcess.CloseMainWindow() | Out-Null
|
||||
Start-Sleep -Seconds 5
|
||||
if (!$cleanupProcess.HasExited) { $cleanupProcess | Stop-Process -EA SilentlyContinue }
|
||||
}
|
||||
else {
|
||||
$cleanupProcess | Stop-Process -EA SilentlyContinue
|
||||
}
|
||||
}
|
||||
$lastCpuUsage = $cpuUsage
|
||||
$lastMemoryUsage = $memoryUsage
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Write-Host 'Setting Windows Update Services StartType...' -ForegroundColor Green
|
||||
Set-Service BITS -StartupType Automatic -ErrorAction SilentlyContinue
|
||||
Set-Service wuauserv -StartupType Manual -ErrorAction SilentlyContinue
|
||||
Set-Service UsoSvc -StartupType Manual -ErrorAction SilentlyContinue
|
||||
Set-Service DoSvc -StartupType Automatic -ErrorAction SilentlyContinue
|
||||
Set-Service AppReadiness -StartupType Manual -ErrorAction SilentlyContinue
|
||||
Set-Service CryptSvc -StartupType Automatic -ErrorAction SilentlyContinue
|
||||
Set-Service WaaSMedicSvc -StartupType Manual -ErrorAction SilentlyContinue
|
||||
|
||||
Write-Host 'Running DISM Repair...' -ForegroundColor Green
|
||||
Write-Host 'DISM can take a very long time please let this process finish...' -ForegroundColor DarkYellow
|
||||
Write-Host '[TIP!] You can view the process in task manager by finding "Windows Module Installer Worker"' -ForegroundColor DarkYellow
|
||||
Add-AppxPackage -RegisterByFamilyName -MainPackage 'MicrosoftWindows.Client.CBS_cw5n1h2txyewy'
|
||||
Dism.exe /Online /Cleanup-Image /RestoreHealth
|
||||
Dism.exe /Online /Cleanup-Image /StartComponentCleanup /Resetbase
|
||||
sfc.exe /scannow
|
||||
|
||||
Write-Host 'Starting Windows Update Services...' -ForegroundColor Green
|
||||
Start-Service BITS *>$null
|
||||
Start-Service DoSvc *>$null
|
||||
Start-Service CryptSvc *>$null
|
||||
|
||||
Add-Type -AssemblyName System.Windows.Forms
|
||||
$result = [System.Windows.Forms.MessageBox]::Show(
|
||||
"A restart is required to finish.`n`nWould you like to restart now?",
|
||||
'Restart Required',
|
||||
[System.Windows.Forms.MessageBoxButtons]::YesNo,
|
||||
[System.Windows.Forms.MessageBoxIcon]::Question
|
||||
)
|
||||
|
||||
if ($result -eq [System.Windows.Forms.DialogResult]::Yes) {
|
||||
Restart-Computer -Force
|
||||
}
|
||||
else {
|
||||
exit
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if ($RunWinUpdateRepair) {
|
||||
Update-Repair
|
||||
}
|
||||
|
||||
|
||||
if ($nonInteractive) {
|
||||
if ($backup) {
|
||||
|
||||
Reference in New Issue
Block a user