Skip to content

Instantly share code, notes, and snippets.

@mavaddat
Last active July 25, 2023 05:53
Show Gist options
  • Save mavaddat/24a03fd07aa059806d58c39b06acee70 to your computer and use it in GitHub Desktop.
Save mavaddat/24a03fd07aa059806d58c39b06acee70 to your computer and use it in GitHub Desktop.
#Requires -RunAsAdministrator
Stop-Service -Name @("bits","wuauserv","appidsvc","cryptsvc")
del "$env:ALLUSERSPROFILE\Application Data\Microsoft\Network\Downloader\qmgr*.*"
if(Test-Path variable:global:errs) {Remove-Variable -Name @("errs") -ErrorAction SilentlyContinue } #$err = $null
$errs = [System.Collections.ArrayList](@{})
function Start-Backup {
param([string[]]$paths = @("$env:SystemRoot\system32\catroot2","$env:SystemRoot\SoftwareDistribution"))
foreach($path in $paths){
$bak = "$($path).bak"
if((Test-Path -PathType Any $bak) -and (Test-Path -PathType Any $path)){
try {
$action = "delete"
del $bak -Recurse -Force -ErrorAction Stop
$action = "rename"
ren $path $bak -ErrorAction Stop
if($errs.Values.Contains($path)) {
$errs.RemoveAt([math]::Round(($errs.Values.IndexOf($path))/$errs.Values.Count))
}
return $true
} catch {
if(-not ($errs.Values.Contains($path))){
$errs.Add( @(@{Message=$_.Exception.Message;Item=$_.Exception.ItemName;Path=$bak;Action=$action;tries=3}))
}
return $false
}
} else {return $true}
}
return $null
}
Start-Backup
cmd.exe /c "sc.exe sdset bits D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)"
cmd.exe /c "sc.exe sdset wuauserv D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)"
cd C:\WINDOWS\System32\
$processes = New-Object -TypeName System.Collections.ArrayList
$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 -Activity "Registering DLL's" -status "Registering $dll" -percentComplete (((1+$dlls.IndexOf($dll))/ $dlls.Count)*100)
if(Test-Path -Path "$($env:windir)\System32\$($dll)" -PathType Leaf){
$startInfo = New-Object Diagnostics.ProcessStartInfo
$startInfo.Filename = "regsvr32.exe"
$startInfo.Arguments = "/s " + $dll
$startInfo.RedirectStandardError = $true
$startInfo.CreateNoWindow = $true
## Start the process
$startInfo.UseShellExecute = $false
$processes.Add(@([Diagnostics.Process]::Start($startInfo),$startInfo)) | Out-Null
#if($processes.Item($processes.Count-1).ExitCode -eq 3) {$codeThree += @($processes.Item($processes.Count-1).Replace("/s ","")) } elseif($processes.Item($processes.Count-1).ExitCode -eq 4) {$codeFour += @($processes.Item($processes.Count-1).Arguments.Replace("/s ","")) }
}
}
.\netsh winsock reset
#the old way to reset proxy is below
#.\cmd.exe /c "proxycfg.exe -d"
.\netsh.exe winhttp reset proxy
foreach($err in $errs){
Write-Host "Could not $($err.Action) ``$($err.Path)`` because $($err.Message.ToLower())`nGoing to try {0} more times" -f $($err.tries--)
while(($err.tries > 0) -and (-not (Start-Backup $err.Path))) {
Write-Host "Going to try {0} more time{1}" -f $($err.tries--),(&{If($err.tries>1) {"s"} Else {""}})
}
}
foreach($err in $errs){Write-Host "Could not $($err.Action) ``$($err.Path)`` because $($err.Message.ToLower())`nTry restarting your computer then running the script again." -ForegroundColor Red}
#foreach ($process in $processes){ if ( -not ($process.ExitCode -ceq 0 )) {if($process.ExitCode -eq 3) {$codeThree += @($process.Arguments.Replace("/s ","")) } elseif($process.ExitCode -eq 4) {$codeFour += @($process.Arguments.Replace("/s ","")) } }}
#$regsvr32err = ($codeThree -join "`", `"")
#Write-Host "The modules `"$($regsvr32err)`" failed to load. Make sure the binaries are stored at the specified path or debug it to check for problems with the binary or dependent .DLL files. The specified module could not be found." -ForegroundColor DarkMagenta
#$regsvr32err = ($codeFour -join "`", `"")
#Write-Host "The modules `"$($regsvr32err)`" was loaded but the entry-point DllRegisterServer was not found. Make sure that `"$($regsvr32err)`" are a valid DLL or OCX file and then try again." -ForegroundColor DarkGreen
@isaak654
Copy link

On Windows 10, I didn't find any qmgr.dat, but just two files named qmgr.db and qmgr.jfm.

You might consider to adjust the third line of this script with:
del "$env:ALLUSERSPROFILE\Application Data\Microsoft\Network\Downloader\qmgr*"

@mavaddat
Copy link
Author

On Windows 10, I didn't find any qmgr.dat, but just two files named qmgr.db and qmgr.jfm.

You might consider to adjust the third line of this script with:
del "$env:ALLUSERSPROFILE\Application Data\Microsoft\Network\Downloader\qmgr*"

Done! Thanks for pointing this out. I haven't had to use the script recently.

@F1dg3tXD
Copy link

F1dg3tXD commented Jul 2, 2022

how do I use the script?

@mavaddat
Copy link
Author

mavaddat commented Jul 3, 2022

Hi @dramaticrobotic ,
You can try the following from PowerShell:

powershell -exec bypass -c "(New-Object Net.WebClient).Proxy.Credentials=[Net.CredentialCache]::DefaultNetworkCredentials;iwr('https://gist.githubusercontent.com/mavaddat/24a03fd07aa059806d58c39b06acee70/raw/bc7b1ee6c5f6b95fd7d083e6f0cfc1d86130c8ee/resetWindowsUpdate.ps1')|iex"

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment