diff --git a/Fix-WindowsAutomaticUpdates.bat b/Fix-WindowsAutomaticUpdates.bat new file mode 100644 index 0000000..0e9e2f3 --- /dev/null +++ b/Fix-WindowsAutomaticUpdates.bat @@ -0,0 +1,71 @@ +@echo off + +rem Determine if WSUS is in use +call :reset-errorlevel +reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v UseWUServer > nul 2>&1 +if %ERRORLEVEL% EQU 0 ( for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v UseWUServer') do if "%%b"=="0x1" goto :check-wuserver ) +goto :wuau-config + +:check-wuserver +rem WSUS might be configured, now we'll check the other WSUS keys to see if it's properly setup +call :reset-errorlevel +reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v WUServer > nul 2>&1 +if %ERRORLEVEL% EQU 0 ( + for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v WUServer') do set WUServer=%%b + goto :check-wustatusserver +) + +:check-wustatusserver +rem WSUS has definitely been configured, now we'll get the name of the WUStatusServer +call :reset-errorlevel +reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v WUStatusServer > nul 2>&1 +if %ERRORLEVEL% EQU 0 ( + for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" /v WUStatusServer') do set WUStatusServer=%%b + goto :wsus-config +) + +:wsus-config +echo Configuring Windows Server Update Services (WSUS) +if [%WUServer%] NEQ [] echo - WSUS Server: %WUServer% +if [%WUStatusServer%] NEQ [] echo - WSUS Status Server: %WUStatusServer% +call :reset-errorlevel +reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v UseWUServer /t REG_DWORD /d "0x0" /f > nul 2>&1 +if %ERRORLEVEL% EQU 0 echo - Disable WSUS (this might be enabled again via GPO) +echo. +goto :wuau-config + +:wuau-config +echo Configuring Windows Automatic Updates +call :reset-errorlevel +reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v AUOptions /t REG_DWORD /d "0x1" /f > nul 2>&1 +if %ERRORLEVEL% EQU 0 echo - Disabled "Keep my computer up to date" option + +call :reset-errorlevel +reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v NoAutoRebootWithLoggedOnUsers /t REG_DWORD /d "0x1" /f > nul 2>&1 +if %ERRORLEVEL% EQU 0 echo - Disabled automatic restart while user is logged in and Automatic Updates are in use (this is just a failsafe) + +call :reset-errorlevel +reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v NoAutoUpdate /t REG_DWORD /d "0x1" /f > nul 2>&1 +if %ERRORLEVEL% EQU 0 echo - Disabled Automatic Updates + +if %ERRORLEVEL% NEQ 0 echo There were errors while updating the registry. Please make sure this script runs with administrative privileges. +echo. + +call :reset-errorlevel +echo Configuring Windows Update service +sc config wuauserv start= auto > nul 2>&1 +if %ERRORLEVEL% EQU 0 echo - Set startup type to automatic +call :reset-errorlevel +net start wuauserv > nul 2>&1 +if %ERRORLEVEL% NEQ 0 ( + echo The Windows Update service may not have been started. Here's it's current status: + sc query wuauserv +) else ( + echo - Started Windows Update service +) + +:done +goto :EOF + +:reset-errorlevel +cmd /c "exit /b 0" \ No newline at end of file