mirror of
https://github.com/ChrisTitusTech/winutil.git
synced 2024-12-22 14:01:31 -06:00
b2dc605098
* Update applications.json Fake app add made by linux fanboy * Compile Winutil * Update screen-install.png (#1464) * Compile Winutil * Update files (#1487) - Add detections for whether the image to be processed by MicroWin is Windows 10 or later - Add procedure to clear the indexes ComboBox (WinForms term) every time an ISO is specified Co-authored-by: Chris Titus <contact@christitus.com> * Lots of changes to Invoke-WPFFixesUpdate (#1467) * Add Guilded into Communication Tab (#1059) * Add Guilded into Communication Tab * Remove Choco Package due to there is no Chocolatey packages * : Add ZeroTier One to utilities menu (#1061) * Update applications.json (#1063) Update to add [SuperF4 - Stefan Sundin](https://stefansundin.github.io/superf4/), as mentioned in #374 [Choco - SuperF4](https://community.chocolatey.org/packages/superf4) maintained by Xav83. [WinGet - SuperF4](https://winstall.app/apps/StefanSundin.Superf4) SuperF4 and Winget package published by Stefan Sundin. * Update inputXML.xaml (#1062) Updated inputXML.xaml to account for addition of the SuperF4 software. * Added AIMP music player (#1064) * Add Ventoy (Chocolatey Only Package) & .NET Core Runtime (Winget & Chocolatey) (#1066) * Tidy up SuperF4 line. * Tidy up SuperF4 line. Used spaces instead of tabs. * Add dotnet 7.0.11 Desktop Runtime * Undone changes to SuperF4 line * Addition of Ventoy (chocolatey only) package * Comment Spacing, Indentation, and Capitalization (#1084) * Comment Spacing, Indentation, and Capitalization * Comment Grammar and Spacing Makes grammar in comments better and more consistent Adds space before comment and centers word in `Write-Host` commands * More Grammar and Formatting * Add some comments * Populate PlaceHolder comments in functions Files I found that has issues: Get-WinUtilRegistry.ps1 Install-WinUtilWinget.ps1 Invoke-WinUtilDarkMode.ps1 Remove-WinUtilAPPX.ps1 Test-WinUtilPackageManager.ps1 Update-WinUtilProgramWinget.ps1 Invoke-WPFUpdatessecurity.ps1 * Tweak a few more comments * Tweak another write-host statement * Undo Catch statement adjustment It's outside of the scope of this pull request * Fix indentation * Description, Progress Bar, and nuke step 10 - Added a full description of exactly what the function does - Replaced `Write-Host`s with multiple progress bars - Might've added too many, but I didn't want to add one for just a few of them as I want the user to be able to see all tasks that have been performed, just like with `Write-Host` - Removed Step 10 - Only applies to Windows 8 * Add Aggressive Parameter, Actually Force Check for Updates * Add aggressive parameter and add system repair step * Lots of changes * Revert Stuff This reverts commit199a92e26e
. Revert "Comment Spacing, Indentation, and Capitalization (#1084)" This reverts commitacc2b5b243
. Revert "Add Ventoy (Chocolatey Only Package) & .NET Core Runtime (Winget & Chocolatey) (#1066)" This reverts commit932ec6a0a0
. Revert "Added AIMP music player (#1064)" This reverts commitd1a4a67a45
. Revert "Update inputXML.xaml (#1062)" This reverts commit2db4cb556e
. Revert "Update applications.json (#1063)" This reverts commitce7edbd60d
. Revert ": Add ZeroTier One to utilities menu (#1061)" This reverts commit783a9657d0
. --------- Co-authored-by: Justawildwolf <62820836+blusewill@users.noreply.github.com> Co-authored-by: Tim Stone <github@tsdev.au> Co-authored-by: Will Barnard <5012445+mrwillbarnz@users.noreply.github.com> Co-authored-by: Ian Bassi <ian.bassi@outlook.com> * Compile Winutil * Invoke-WPFRunspace argument fix (#1497) * Compile Winutil * Fixes, Changes & Features Added (Broken links & Comments) (#1476) * Fixes & Changes (Broken links & Comments) - Snappy Driver Installer Origin Github source code deprecated. Replaced with SourceForge official source code site. - Spacedrive File Manager "spacedrive.org" not working. Changed to official site. **Recent Alpha ver 0.2.0 - crashing on install for Win10+ (not tested in "lower" win versions), may be better to remove overall or place on standby.** - Xtreme Download Manager Web Integration not working for chromium based browser. **Deprecated by Manifest V3, no official update release.** * Update applications.json Reverted winget for Spacedrive to original. Spacedrive.FileSystem -> spacedrive.Spacedrive * Fix for Portmaster [Wrong repo/winget] * Choco Safing Portmaster * Added Apps Request - Added TeCno Account Switcher Resolves Feature Request n.6° #1451 - Added ATLauncher - Added OP Auto Clicker - Added Motrix Download Manager Resolves Feature Request #1443 * Fixed Panel Numbers * Added Thonny Python IDE - Feature Request #1451 * Update applications.json fix few missing values * Update applications.json add winget thonny --------- Co-authored-by: Chris Titus <contact@christitus.com> * Compile Winutil * Fixed typo: latancy to latency (#1492) * Compile Winutil * Update inputXML.xaml (#1462) * Compile Winutil * Update .gitignore * add Dax Studio program to the Development category (#1500) * Compile Winutil * Add GitHub CLI to applications (#1460) * Added GitHub CLI to applications GitHub cli is the command line interface offered by github alongside github desktop. For more information see: https://github.com/cli/cli. Installation instructions taken from: https://github.com/cli/cli#windows * spelling: removed accidental dot * Compile Winutil * Add Vesktop to applications.json (#1461) * Add Vesktop to applications.json * fix syntax error --------- Co-authored-by: Chris Titus <contact@christitus.com> * Compile Winutil * Add some apps (#1466) * Add some apps * Fix WPFInstallopenhashtab --------- Co-authored-by: Chris Titus <contact@christitus.com> * Compile Winutil * adds helix to development tools (#1469) * Compile Winutil * Add tooltips to config checkboxes (#1470) * Fix typo * Update winutil.ps1 * Update winutil.ps1 Add tooltips to checkboxes in config session and rewrite so to make things more clear as to what each tweak does * Revert "Update winutil.ps1" This reverts commitaaa69c473f
. * Add applications Added Sonarr, Radarr, Prowlarr and Bazarr in response to an github issue * Add applications Added applications to the GUI * Revert "Add applications" This reverts commite5fba2b4eb
. * Revert "Add applications" This reverts commit55ff75a65c
. * Edit xaml files Editing the xaml files so the changes persist upon compilation --------- Co-authored-by: Chris Titus <contact@christitus.com> * Compile Winutil * Add Mumble (#1481) Add Mumble to Communications category. * Compile Winutil * Added 'Stremio' (#1473) * Compile Winutil * Update applications.json Added 'Stremio' * Compile Winutil --------- Co-authored-by: REVENGE977 <REVENGE977@users.noreply.github.com> Co-authored-by: Chris Titus <contact@christitus.com> * Add the Mullvad Browser (#1475) * add mullvad browser * Missing tab * fix format --------- Co-authored-by: Kristjan <krissiomar@gmail.com> Co-authored-by: Chris Titus <contact@christitus.com> * Compile Winutil * Added some Applications (#1484) * Update applications.json Add: - Rancher Desktop - ManicTime - qFlipper - ModernFlyouts - ZoomIt - StartAllBack - Wintoys - Minecraft Launcher * Update applications.json added: - Arduino IDE - Whatsapp * Update applications.json corrected spacing * Update applications.json fixed winget commands --------- Co-authored-by: Chris Titus <contact@christitus.com> * Added WinMerge Application in Development category. (#1485) WinMerge is an Open Source differencing and merging tool for Windows. * Compile Winutil * Fix few app links and add app (issues/1478) (#1495) * Update some app links * Update winutil.ps1 Date update * Add Syncthingtray Related to the issue: https://github.com/ChrisTitusTech/winutil/issues/1478 * Update applications.json update putty link --------- Co-authored-by: Chris Titus <contact@christitus.com> * Compile Winutil * Update applications.json * Compile Winutil * App fix and sort * Add Dual Monitor tools to applications.json (#1504) * Add Dual Monitor tools to applications.json * Update applications.json * Update applications.json --------- Co-authored-by: Chris Titus <contact@christitus.com> * Compile Winutil --------- Co-authored-by: ChrisTitusTech <ChrisTitusTech@users.noreply.github.com> Co-authored-by: Samq64 <81489795+Samq64@users.noreply.github.com> Co-authored-by: CodingWonders <101426328+CodingWonders@users.noreply.github.com> Co-authored-by: Carter <60557606+Carterpersall@users.noreply.github.com> Co-authored-by: Justawildwolf <62820836+blusewill@users.noreply.github.com> Co-authored-by: Tim Stone <github@tsdev.au> Co-authored-by: Will Barnard <5012445+mrwillbarnz@users.noreply.github.com> Co-authored-by: Ian Bassi <ian.bassi@outlook.com> Co-authored-by: ogfrm <96927197+ogfrm@users.noreply.github.com> Co-authored-by: v-Kaefer <128633407+v-Kaefer@users.noreply.github.com> Co-authored-by: Shashank B N <117376750+Athena-2003@users.noreply.github.com> Co-authored-by: Alex Schwartz <alexschwartz01@gmail.com> Co-authored-by: André Gonzalez <lopescg@gmail.com> Co-authored-by: David Hardt <contact@hardt.ai> Co-authored-by: Choccy Milk <152878702+choccyy-milk@users.noreply.github.com> Co-authored-by: OmriOn <omri.hermon@gmail.com> Co-authored-by: Breno Fernandes <fernandesopa@gmail.com> Co-authored-by: Yuri Gabriel <97139700+Yuuh15@users.noreply.github.com> Co-authored-by: Filip Zurek <zurfil@tuta.com> Co-authored-by: H4D3S <32039975+REVENGE977@users.noreply.github.com> Co-authored-by: REVENGE977 <REVENGE977@users.noreply.github.com> Co-authored-by: KristjanOmar <117899282+KristjanOmar@users.noreply.github.com> Co-authored-by: Kristjan <krissiomar@gmail.com> Co-authored-by: MyDrift <personal@mdiana.ch> Co-authored-by: Akash Singh <52990376+Akash-S1999@users.noreply.github.com> Co-authored-by: Roc Wang <rocwang911@gmail.com> Co-authored-by: José Roberto Sánchez <jose_roberto_ss@hotmail.com>
292 lines
17 KiB
PowerShell
292 lines
17 KiB
PowerShell
function Invoke-WPFFixesUpdate {
|
|
|
|
<#
|
|
|
|
.SYNOPSIS
|
|
Performs various tasks in an attempt to repair Windows Update
|
|
|
|
.DESCRIPTION
|
|
1. (Aggressive Only) Scans the system for corruption using chkdsk, SFC, and DISM
|
|
Steps:
|
|
1. Runs chkdsk /scan /perf
|
|
/scan - Runs an online scan on the volume
|
|
/perf - Uses more system resources to complete a scan as fast as possible
|
|
2. Runs SFC /scannow
|
|
/scannow - Scans integrity of all protected system files and repairs files with problems when possible
|
|
3. Runs DISM /Online /Cleanup-Image /RestoreHealth
|
|
/Online - Targets the running operating system
|
|
/Cleanup-Image - Performs cleanup and recovery operations on the image
|
|
/RestoreHealth - Scans the image for component store corruption and attempts to repair the corruption using Windows Update
|
|
4. Runs SFC /scannow
|
|
Ran twice in case DISM repaired SFC
|
|
2. Stops Windows Update Services
|
|
3. Remove the QMGR Data file, which stores BITS jobs
|
|
4. (Aggressive Only) Renames the DataStore and CatRoot2 folders
|
|
DataStore - Contains the Windows Update History and Log Files
|
|
CatRoot2 - Contains the Signatures for Windows Update Packages
|
|
5. Renames the Windows Update Download Folder
|
|
6. Deletes the Windows Update Log
|
|
7. (Aggressive Only) Resets the Security Descriptors on the Windows Update Services
|
|
8. Reregisters the BITS and Windows Update DLLs
|
|
9. Removes the WSUS client settings
|
|
10. Resets WinSock
|
|
11. Gets and deletes all BITS jobs
|
|
12. Sets the startup type of the Windows Update Services then starts them
|
|
13. Forces Windows Update to check for updates
|
|
|
|
.PARAMETER Aggressive
|
|
If specified, the script will take additional steps to repair Windows Update that are more dangerous, take a significant amount of time, or are generally unnecessary
|
|
|
|
#>
|
|
|
|
param($Aggressive = $false)
|
|
|
|
Write-Progress -Id 0 -Activity "Repairing Windows Update" -PercentComplete 0
|
|
# Wait for the first progress bar to show, otherwise the second one won't show
|
|
Start-Sleep -Milliseconds 200
|
|
|
|
if ($Aggressive) {
|
|
# Scan system for corruption
|
|
Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Scanning for corruption..." -PercentComplete 0
|
|
Write-Progress -Id 1 -ParentId 0 -Activity "Scanning for corruption" -Status "Running chkdsk..." -PercentComplete 0
|
|
# 2>&1 redirects stdout, alowing iteration over the output
|
|
chkdsk.exe /scan /perf 2>&1 | ForEach-Object {
|
|
# Write stdout to the Verbose stream
|
|
Write-Verbose $_
|
|
|
|
# Get the index of the total percentage
|
|
$index = $_.IndexOf("Total:")
|
|
if (
|
|
# If the percent is found
|
|
($percent = try {(
|
|
$_.Substring(
|
|
$index + 6,
|
|
$_.IndexOf("%", $index) - $index - 6
|
|
)
|
|
).Trim()} catch {0}) `
|
|
<# And the current percentage is greater than the previous one #>`
|
|
-and $percent -gt $oldpercent
|
|
){
|
|
# Update the progress bar
|
|
$oldpercent = $percent
|
|
Write-Progress -Id 1 -ParentId 0 -Activity "Scanning for corruption" -Status "Running chkdsk... ($percent%)" -PercentComplete $percent
|
|
}
|
|
}
|
|
|
|
Write-Progress -Id 1 -ParentId 0 -Activity "Scanning for corruption" -Status "Running SFC..." -PercentComplete 0
|
|
$oldpercent = 0
|
|
# SFC has a bug when redirected which causes it to output only when the stdout buffer is full, causing the progress bar to move in chunks
|
|
sfc /scannow 2>&1 | ForEach-Object {
|
|
# Write stdout to the Verbose stream
|
|
Write-Verbose $_
|
|
|
|
# Filter for lines that contain a percentage that is greater than the previous one
|
|
if (
|
|
(
|
|
# Use a different method to get the percentage that accounts for SFC's Unicode output
|
|
[int]$percent = try {(
|
|
(
|
|
$_.Substring(
|
|
$_.IndexOf("n") + 2,
|
|
$_.IndexOf("%") - $_.IndexOf("n") - 2
|
|
).ToCharArray() | Where-Object {$_}
|
|
) -join ''
|
|
).TrimStart()} catch {0}
|
|
) -and $percent -gt $oldpercent
|
|
){
|
|
# Update the progress bar
|
|
$oldpercent = $percent
|
|
Write-Progress -Id 1 -ParentId 0 -Activity "Scanning for corruption" -Status "Running SFC... ($percent%)" -PercentComplete $percent
|
|
}
|
|
}
|
|
|
|
Write-Progress -Id 1 -ParentId 0 -Activity "Scanning for corruption" -Status "Running DISM..." -PercentComplete 0
|
|
$oldpercent = 0
|
|
DISM /Online /Cleanup-Image /RestoreHealth | ForEach-Object {
|
|
# Write stdout to the Verbose stream
|
|
Write-Verbose $_
|
|
|
|
# Filter for lines that contain a percentage that is greater than the previous one
|
|
if (
|
|
($percent = try {
|
|
[int]($_ -replace "\[" -replace "=" -replace " " -replace "%" -replace "\]")
|
|
} catch {0}) `
|
|
-and $percent -gt $oldpercent
|
|
){
|
|
# Update the progress bar
|
|
$oldpercent = $percent
|
|
Write-Progress -Id 1 -ParentId 0 -Activity "Scanning for corruption" -Status "Running DISM... ($percent%)" -PercentComplete $percent
|
|
}
|
|
}
|
|
|
|
Write-Progress -Id 1 -ParentId 0 -Activity "Scanning for corruption" -Status "Running SFC again..." -PercentComplete 0
|
|
$oldpercent = 0
|
|
sfc /scannow 2>&1 | ForEach-Object {
|
|
# Write stdout to the Verbose stream
|
|
Write-Verbose $_
|
|
|
|
# Filter for lines that contain a percentage that is greater than the previous one
|
|
if (
|
|
(
|
|
[int]$percent = try {(
|
|
(
|
|
$_.Substring(
|
|
$_.IndexOf("n") + 2,
|
|
$_.IndexOf("%") - $_.IndexOf("n") - 2
|
|
).ToCharArray() | Where-Object {$_}
|
|
) -join ''
|
|
).TrimStart()} catch {0}
|
|
) -and $percent -gt $oldpercent
|
|
){
|
|
# Update the progress bar
|
|
$oldpercent = $percent
|
|
Write-Progress -Id 1 -ParentId 0 -Activity "Scanning for corruption" -Status "Running SFC... ($percent%)" -PercentComplete $percent
|
|
}
|
|
}
|
|
Write-Progress -Id 1 -ParentId 0 -Activity "Scanning for corruption" -Status "Completed" -PercentComplete 100
|
|
}
|
|
|
|
|
|
Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Stopping Windows Update Services..." -PercentComplete 10
|
|
# Stop the Windows Update Services
|
|
Write-Progress -Id 2 -ParentId 0 -Activity "Stopping Services" -Status "Stopping BITS..." -PercentComplete 0
|
|
Stop-Service -Name BITS -Force
|
|
Write-Progress -Id 2 -ParentId 0 -Activity "Stopping Services" -Status "Stopping wuauserv..." -PercentComplete 20
|
|
Stop-Service -Name wuauserv -Force
|
|
Write-Progress -Id 2 -ParentId 0 -Activity "Stopping Services" -Status "Stopping appidsvc..." -PercentComplete 40
|
|
Stop-Service -Name appidsvc -Force
|
|
Write-Progress -Id 2 -ParentId 0 -Activity "Stopping Services" -Status "Stopping cryptsvc..." -PercentComplete 60
|
|
Stop-Service -Name cryptsvc -Force
|
|
Write-Progress -Id 2 -ParentId 0 -Activity "Stopping Services" -Status "Completed" -PercentComplete 100
|
|
|
|
|
|
# Remove the QMGR Data file
|
|
Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Renaming/Removing Files..." -PercentComplete 20
|
|
Write-Progress -Id 3 -ParentId 0 -Activity "Renaming/Removing Files" -Status "Removing QMGR Data files..." -PercentComplete 0
|
|
Remove-Item "$env:allusersprofile\Application Data\Microsoft\Network\Downloader\qmgr*.dat" -ErrorAction SilentlyContinue
|
|
|
|
|
|
if ($Aggressive) {
|
|
# Rename the Windows Update Log and Signature Folders
|
|
Write-Progress -Id 3 -ParentId 0 -Activity "Renaming/Removing Files" -Status "Renaming the Windows Update Log, Download, and Signature Folder..." -PercentComplete 20
|
|
Rename-Item $env:systemroot\SoftwareDistribution\DataStore DataStore.bak -ErrorAction SilentlyContinue
|
|
Rename-Item $env:systemroot\System32\Catroot2 catroot2.bak -ErrorAction SilentlyContinue
|
|
}
|
|
|
|
# Rename the Windows Update Download Folder
|
|
Write-Progress -Id 3 -ParentId 0 -Activity "Renaming/Removing Files" -Status "Renaming the Windows Update Download Folder..." -PercentComplete 20
|
|
Rename-Item $env:systemroot\SoftwareDistribution\Download Download.bak -ErrorAction SilentlyContinue
|
|
|
|
# Delete the legacy Windows Update Log
|
|
Write-Progress -Id 3 -ParentId 0 -Activity "Renaming/Removing Files" -Status "Removing the old Windows Update log..." -PercentComplete 80
|
|
Remove-Item $env:systemroot\WindowsUpdate.log -ErrorAction SilentlyContinue
|
|
Write-Progress -Id 3 -ParentId 0 -Activity "Renaming/Removing Files" -Status "Completed" -PercentComplete 100
|
|
|
|
|
|
if ($Aggressive) {
|
|
# Reset the Security Descriptors on the Windows Update Services
|
|
Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Resetting the WU Service Security Descriptors..." -PercentComplete 25
|
|
Write-Progress -Id 4 -ParentId 0 -Activity "Resetting the WU Service Security Descriptors" -Status "Resetting the BITS Security Descriptor..." -PercentComplete 0
|
|
Start-Process -NoNewWindow -FilePath "sc.exe" -ArgumentList "sdset", "bits", "D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)"
|
|
Write-Progress -Id 4 -ParentId 0 -Activity "Resetting the WU Service Security Descriptors" -Status "Resetting the wuauserv Security Descriptor..." -PercentComplete 50
|
|
Start-Process -NoNewWindow -FilePath "sc.exe" -ArgumentList "sdset", "wuauserv", "D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)"
|
|
Write-Progress -Id 4 -ParentId 0 -Activity "Resetting the WU Service Security Descriptors" -Status "Completed" -PercentComplete 100
|
|
}
|
|
|
|
|
|
# Reregister the BITS and Windows Update DLLs
|
|
Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Reregistering DLLs..." -PercentComplete 40
|
|
$oldLocation = Get-Location
|
|
Set-Location $env:systemroot\system32
|
|
$i = 0
|
|
$DLLs = @(
|
|
"atl.dll", "urlmon.dll", "mshtml.dll", "shdocvw.dll", "browseui.dll",
|
|
"jscript.dll", "vbscript.dll", "scrrun.dll", "msxml.dll", "msxml3.dll",
|
|
"msxml6.dll", "actxprxy.dll", "softpub.dll", "wintrust.dll", "dssenh.dll",
|
|
"rsaenh.dll", "gpkcsp.dll", "sccbase.dll", "slbcsp.dll", "cryptdlg.dll",
|
|
"oleaut32.dll", "ole32.dll", "shell32.dll", "initpki.dll", "wuapi.dll",
|
|
"wuaueng.dll", "wuaueng1.dll", "wucltui.dll", "wups.dll", "wups2.dll",
|
|
"wuweb.dll", "qmgr.dll", "qmgrprxy.dll", "wucltux.dll", "muweb.dll", "wuwebv.dll"
|
|
)
|
|
foreach ($dll in $DLLs) {
|
|
Write-Progress -Id 5 -ParentId 0 -Activity "Reregistering DLLs" -Status "Registering $dll..." -PercentComplete ($i / $DLLs.Count * 100)
|
|
$i++
|
|
Start-Process -NoNewWindow -FilePath "regsvr32.exe" -ArgumentList "/s", $dll
|
|
}
|
|
Set-Location $oldLocation
|
|
Write-Progress -Id 5 -ParentId 0 -Activity "Reregistering DLLs" -Status "Completed" -PercentComplete 100
|
|
|
|
|
|
# Remove the WSUS client settings
|
|
if (Test-Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate") {
|
|
Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Removing WSUS client settings..." -PercentComplete 60
|
|
Write-Progress -Id 6 -ParentId 0 -Activity "Removing WSUS client settings" -PercentComplete 0
|
|
Start-Process -NoNewWindow -FilePath "REG" -ArgumentList "DELETE", "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate", "/v", "AccountDomainSid", "/f" -RedirectStandardError $true
|
|
Start-Process -NoNewWindow -FilePath "REG" -ArgumentList "DELETE", "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate", "/v", "PingID", "/f" -RedirectStandardError $true
|
|
Start-Process -NoNewWindow -FilePath "REG" -ArgumentList "DELETE", "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate", "/v", "SusClientId", "/f" -RedirectStandardError $true
|
|
Write-Progress -Id 6 -ParentId 0 -Activity "Removing WSUS client settings" -Status "Completed" -PercentComplete 100
|
|
}
|
|
|
|
|
|
# Reset WinSock
|
|
Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Resetting WinSock..." -PercentComplete 65
|
|
Write-Progress -Id 7 -ParentId 0 -Activity "Resetting WinSock" -Status "Resetting WinSock..." -PercentComplete 0
|
|
Start-Process -NoNewWindow -FilePath "netsh" -ArgumentList "winsock", "reset" -RedirectStandardOutput $true
|
|
Start-Process -NoNewWindow -FilePath "netsh" -ArgumentList "winhttp", "reset", "proxy" -RedirectStandardOutput $true
|
|
Start-Process -NoNewWindow -FilePath "netsh" -ArgumentList "int", "ip", "reset" -RedirectStandardOutput $true
|
|
Write-Progress -Id 7 -ParentId 0 -Activity "Resetting WinSock" -Status "Completed" -PercentComplete 100
|
|
|
|
|
|
# Get and delete all BITS jobs
|
|
Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Deleting BITS jobs..." -PercentComplete 75
|
|
Write-Progress -Id 8 -ParentId 0 -Activity "Deleting BITS jobs" -Status "Deleting BITS jobs..." -PercentComplete 0
|
|
Get-BitsTransfer | Remove-BitsTransfer
|
|
Write-Progress -Id 8 -ParentId 0 -Activity "Deleting BITS jobs" -Status "Completed" -PercentComplete 100
|
|
|
|
|
|
# Change the startup type of the Windows Update Services and start them
|
|
Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Starting Windows Update Services..." -PercentComplete 90
|
|
Write-Progress -Id 9 -ParentId 0 -Activity "Starting Windows Update Services" -Status "Starting BITS..." -PercentComplete 0
|
|
Get-Service BITS | Set-Service -StartupType Manual -PassThru | Start-Service
|
|
Write-Progress -Id 9 -ParentId 0 -Activity "Starting Windows Update Services" -Status "Starting wuauserv..." -PercentComplete 25
|
|
Get-Service wuauserv | Set-Service -StartupType Manual -PassThru | Start-Service
|
|
Write-Progress -Id 9 -ParentId 0 -Activity "Starting Windows Update Services" -Status "Starting AppIDSvc..." -PercentComplete 50
|
|
# The AppIDSvc service is protected, so the startup type has to be changed in the registry
|
|
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\AppIDSvc" -Name "Start" -Value "3" # Manual
|
|
Start-Service AppIDSvc
|
|
Write-Progress -Id 9 -ParentId 0 -Activity "Starting Windows Update Services" -Status "Starting CryptSvc..." -PercentComplete 75
|
|
Get-Service CryptSvc | Set-Service -StartupType Manual -PassThru | Start-Service
|
|
Write-Progress -Id 9 -ParentId 0 -Activity "Starting Windows Update Services" -Status "Completed" -PercentComplete 100
|
|
|
|
|
|
# Force Windows Update to check for updates
|
|
Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Forcing discovery..." -PercentComplete 95
|
|
Write-Progress -Id 10 -ParentId 0 -Activity "Forcing discovery" -Status "Forcing discovery..." -PercentComplete 0
|
|
(New-Object -ComObject Microsoft.Update.AutoUpdate).DetectNow()
|
|
Start-Process -NoNewWindow -FilePath "wuauclt" -ArgumentList "/resetauthorization", "/detectnow"
|
|
Write-Progress -Id 10 -ParentId 0 -Activity "Forcing discovery" -Status "Completed" -PercentComplete 100
|
|
Write-Progress -Id 0 -Activity "Repairing Windows Update" -Status "Completed" -PercentComplete 100
|
|
|
|
$ButtonType = [System.Windows.MessageBoxButton]::OK
|
|
$MessageboxTitle = "Reset Windows Update "
|
|
$Messageboxbody = ("Stock settings loaded.`n Please reboot your computer")
|
|
$MessageIcon = [System.Windows.MessageBoxImage]::Information
|
|
|
|
[System.Windows.MessageBox]::Show($Messageboxbody, $MessageboxTitle, $ButtonType, $MessageIcon)
|
|
Write-Host "==============================================="
|
|
Write-Host "-- Reset All Windows Update Settings to Stock -"
|
|
Write-Host "==============================================="
|
|
|
|
# Remove the progress bars
|
|
Write-Progress -Id 0 -Activity "Repairing Windows Update" -Completed
|
|
Write-Progress -Id 1 -Activity "Scanning for corruption" -Completed
|
|
Write-Progress -Id 2 -Activity "Stopping Services" -Completed
|
|
Write-Progress -Id 3 -Activity "Renaming/Removing Files" -Completed
|
|
Write-Progress -Id 4 -Activity "Resetting the WU Service Security Descriptors" -Completed
|
|
Write-Progress -Id 5 -Activity "Reregistering DLLs" -Completed
|
|
Write-Progress -Id 6 -Activity "Removing WSUS client settings" -Completed
|
|
Write-Progress -Id 7 -Activity "Resetting WinSock" -Completed
|
|
Write-Progress -Id 8 -Activity "Deleting BITS jobs" -Completed
|
|
Write-Progress -Id 9 -Activity "Starting Windows Update Services" -Completed
|
|
Write-Progress -Id 10 -Activity "Forcing discovery" -Completed
|
|
} |