Last updated 24FEB2016
This is version 4 of my scripts to remove and block Windows 10 updates and related telemetry.
I’ve seen multiple posts at websites and forums telling folks how to deal with GWX. Most of them either don’t go far enough, or usually, they go way too far and break stuff.
This applies to Windows 7 ONLY.
Why Windows 7 only? I wrote this for my own use. My personal view is that I can’t understand why anyone would replace Windows 7 with Windows 10. On the other hand, the only trace of Windows 8 I have left is one a virtual machine.
If you want an easy to use program see: GWX Control Panel
Since it has become obvious that this will be a running battle with Microsoft I’ve decided to make this page the permanent place to these scripts rather than a new post every time I update it.
You’ll need to check back here monthly for updates as Microsoft keeps re-releasing updates that in effect unhides them.
You’ll also want to keep the script handy and rerun it monthly for the same reason.
Though info on all this stuff has come from dozens of sources, much of this info has come from the MDL forums.
In particular this thread: Remove Telemetry and Windows 10 Related Updates from Windows 7
This is the final version of this article (the original now points back here) unless something new pops up. It is lighter than previous versions.
Download my batch file: https://www.dropbox.com/s/8s8hswarhvu8ih3/block_GWX_final.zip?dl=0 (please don’t share/repost link)
Inspiration for this came from a variety of sources but started HERE.
There is NO SUPPORT for this. You get what you pay for
This folder contains:
BlockGWXetcFINAL.bat – Removes and Hides GWX related updates like in step 2 above.
HideGWXetc.vbs – Automatically run by the above .bat files. This hides the updates the batch file uninstalled.
README.txt – Instructions
th_add_CMDandTO.reg – Adds open command windows here (standard and admin) ,and Take Ownership to right-click.
DisableAutoWinUp.reg – Sets Windows Update to “Never check for updates” and UNCHECKS “Give me recommended updates the same way I receive important updates.”
DisableAutoWinUpButCheck.reg – Next Set Windows Update to:
“Check for updates but let me choose whether to download and install them” and UNCHECKS “Give me recommended updates the same way I receive important updates.”
DisableOsUpgradeGpedit.reg – Sets Group Policy to “Turn off the upgrade to the latest version of Windows through Windows Update”
The .bat file and the .vbs files MUST be in the same folder!
(code is listed below)
To do this:
Either right-click the folder and choose Open Command Window Here as Administrator.
In the resulting command window type BlockGWXetcFINAL.bat and hit enter.
right-click the BlockGWXetcFINAL.bat file (see above) and choose Run as Administrator.
If you do not have these right-click options, double-click in included th_add_CMDandTO.reg file and logout/reboot.
Let it run, when the .bat file runs HideGWXetc.vbs it will take a while.
It may look like things have stopped, they haven’t.
DO NOT CLOSE WINDOW UNTIL YOU SEE: ” – Finished … All operations complete. Reboot now. Press any key to continue . . .”
Code for batch files:
:: This must be run as admin.
:: By TweakHound (https://tweakhound.com)I blatently copied pieces of script from varoius sources.
:: Uninstalls Win10 GWX and related updates from Windows 7 ONLY.
:: Last updated 24FEB2016
:: Other scripts floating around are either incorrect or WILL break Windows Update.
:: The level of support you will receive is equal to the amount you paid for this ;-)
REM --- Stopping GWX processes...
echo stopping GWX.exe
taskkill /f /t /im gwx.exe
REM --- uninstall updates
echo uninstalling KB2952664
start "title" /b /wait wusa.exe /kb:2952664 /uninstall /quiet /norestart
echo done, uninstalling KB2977759
start "title" /b /wait wusa.exe /kb:2977759 /uninstall /quiet /norestart
echo done, uninstalling KB3021917
start "title" /b /wait wusa.exe /kb:3021917 /uninstall /quiet /norestart
echo done, uninstalling KB3035583
start "title" /b /wait wusa.exe /kb:3035583 /uninstall /quiet /norestart
echo done, uninstalling KB3068708
start "title" /b /wait wusa.exe /kb:3068708 /uninstall /quiet /norestart
echo done, uninstalling KB3075249
start "title" /b /wait wusa.exe /kb:3075249 /uninstall /quiet /norestart
echo done, uninstalling KB3080149
start "title" /b /wait wusa.exe /kb:3080149 /uninstall /quiet /norestart
echo next, removing left over folders...
REM --- delete folders
takeown /f C:\Windows\System32\GWX /r /d y
icacls C:\Windows\System32\GWX /grant administrators:F /t
rmdir /s /q C:\Windows\System32\GWX\
takeown /f %localappdata%\GWX /r /d y
icacls %localappdata%\GWX /grant administrators:F /t
rmdir /s /q %localappdata%\GWX\
echo finished...waiting to block OS upgrades...
REM --- Block OS upgrade
reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\GWX
reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\GWX /v DisableGWX /t REG_DWORD /d 00000001
echo finished...waiting to hide these updates...
REM --- hide updates
echo Hiding GWX related updates. Running HideGWXetc.vbs...
echo This may take a while.
echo DO NOT CLOSE WINDOW UNTIL YOU SEE: " - Finished ... All operations complete. Reboot now. Press any key to continue . . ."
start "title" /b /wait cscript.exe "%~dp0HideGWXetc.vbs" 2952664 2977759 3021917 3035583 3068708 3075249 3080149 3102810
echo - Finished
echo ... All operations complete. Reboot now.
REM --- EOF
Code for HideGWXetc.vbs
hideupdates(0) = "KB2952664"
hideupdates(1) = "KB2977759"
hideupdates(2) = "KB3021917"
hideupdates(3) = "KB3035583"
hideupdates(4) = "KB3068708"
hideupdates(5) = "KB3075249"
hideupdates(6) = "KB3080149"
set updateSession = createObject("Microsoft.Update.Session")
set updateSearcher = updateSession.CreateupdateSearcher()
Set searchResult = updateSearcher.Search("IsInstalled=0 and Type='Software'")
For i = 0 To searchResult.Updates.Count-1
set update = searchResult.Updates.Item(i)
For j = LBound(hideupdates) To UBound(hideupdates)
if instr(1, update.Title, hideupdates(j), vbTextCompare) = 0 then
'Wscript.echo "No match found for " & hideupdates(j)
Wscript.echo "Hiding updates..." & hideupdates(j)
update.IsHidden = True