หยุดการอัพเดตอัตโนมัติทั้งหมด Windows 10


75

เราได้อัปเกรดเครื่องบางรุ่นเป็น Windows 10 และรับรู้ว่ามีการอัปเดตบางอย่างซึ่งได้รับการอัปเดตตามที่ต้องการ อย่างไรก็ตามฉันรู้ว่าไม่มีตัวเลือกใดที่จะหยุดการดาวน์โหลดเช่นเดียวกับใน Windows 7 และ 8.1 วิธีเดียวที่ฉันสามารถหยุดการดาวน์โหลดได้คือหยุดบริการWindows Update

คำถามของฉันคือใครรู้วิธีหยุดการปรับปรุงอัตโนมัติหรือหยุดบริการเป็นทางออกเดียวหรือไม่


4
หากคุณมี Windows 10 Home ไม่สามารถทำได้ หากคุณมี Windows 10 Professional คุณสามารถเลื่อนการอัปเดตได้สูงสุด 8 เดือน หากคุณมี Windows 10 Enterprise คุณสามารถเลื่อนการอัปเดตเพื่อแจ้ง LSTB ที่คุณต้องการใช้ มีเครื่องมือที่คุณสามารถดาวน์โหลดได้ซึ่งจะช่วยให้คุณเลื่อนการอัปเดตแต่ละรายการหากพวกเขาทำให้เกิดปัญหา คำถามนี้ถูกถามไปหลายครั้งแล้ว .
Ramhound

นอกจากนี้ในตอนท้ายของวันเพื่อรับการปรับปรุงความปลอดภัยในอนาคตระบบของคุณจะต้องมีการอัพเดทที่จำเป็นทั้งหมดแม้ว่าคุณจะใช้ Windows 10 Professional KB3073930เป็นเครื่องมือที่คุณต้องการหากคุณต้องการซ่อน / เลื่อนการอัปเดตแต่ละรายการ
Ramhound

@Ramhound ฉันเข้าใจว่าจำเป็นต้องมีการอัปเดตความปลอดภัยและอื่น ๆ แต่บางครั้งคุณเพียงแค่ต้องการหยุดชั่วคราวและเริ่มใหม่ในภายหลัง เรากำลังเรียกใช้รุ่นโปร คุณจะรู้ว่าฉันสามารถหาเครื่องมือที่คุณพูดถึงในความคิดเห็นของคุณได้จากที่ใด
Izzy

2
การหยุดและการชะลอตัวเป็น 2 สิ่งที่แตกต่างกัน
Moab

2
โปรดทราบว่าคำตอบทั้งหมดที่นี่ครอบคลุมเฉพาะการอัปเดตจาก Windows Update แต่ไม่ชัดเจนว่าคำถามนั้นมีความหมายครอบคลุมหรือไม่ Windows 10 ดูเหมือนว่าจะมีวิธีการอัพเดตในตัวอีกสองวิธี: การอัปเดตไดรเวอร์อุปกรณ์จะถูกควบคุมแยกต่างหาก (ระบบ & rarr; การตั้งค่าระบบขั้นสูง & rarr; ฮาร์ดแวร์ & rarr; การตั้งค่าการติดตั้งอุปกรณ์ดูเหมือนจะครอบคลุมเรื่องนี้) ร้านค้า (ฉันคิดว่านี่จะหยุด Candy Crush Soda Saga เช่นจากการติดตั้งโดยอัตโนมัติ)
doshea

คำตอบ:


40

หากคุณมีรุ่น Pro ค้นหาการแก้ไขนโยบายกลุ่มเปิด (gpedit.msc)ค้นหาConfigure automatic updatesรายการตั้งอยู่ที่:

computer configuration → administrative templates → windows components → windows update

ป้อนคำอธิบายรูปภาพที่นี่

Notify for download and notify for installและเลือก

เมื่อ Windows ตรวจพบการปรับปรุงใหม่มันแสดงให้เห็นการแจ้งเตือนขนมปังปิ้ง

ป้อนคำอธิบายรูปภาพที่นี่

คุณยังสามารถใช้เครื่องมือแก้ไขปัญหาจากอัปเดต KB3073930เพื่อปิดใช้งานการปรับปรุงที่มีปัญหาบางอย่างเพื่อไม่ให้ติดตั้งอีกครั้ง

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่

นี่เป็นวิธีการอย่างเป็นทางการจาก Microsoft เพื่อป้องกันการตั้งค่าการอัพเดทและไดรเวอร์ที่ไม่ต้องการ

แต่มีเครื่องมือบุคคลที่สามที่เรียกว่าWindows Update MiniToolซึ่งอนุญาตให้เลือกว่าจะติดตั้งการอัปเดตใดและอนุญาตให้บล็อกการอัปเดตเช่นเดียวกับใน Windows รุ่นเก่า

ป้อนคำอธิบายรูปภาพที่นี่

ทางเลือกในการมาตรฐานของ Windows Update คุณสามารถทำอะไร:
•ตรวจสอบการอัพเดต
•ดาวน์โหลดการปรับปรุง
•การติดตั้งอัพเดท
•ลบติดตั้งการปรับปรุง
การซ่อนการปรับปรุงที่ไม่พึงประสงค์
•รับการเชื่อมโยงโดยตรงกับไฟล์ * .cab / * .Exe / * .Psf ปรับปรุง
• ดูประวัติการอัปเดต
กำหนดค่าการอัปเดตอัตโนมัติ
•เครื่องมือนี้เปรียบเสมือนโมดูล PowerShell ภายนอก PSWindowsUpdate แต่มีคุณสมบัติขั้นสูงและเป็นมิตรกับผู้ใช้มากขึ้น
•เครื่องมือนี้ใช้และใช้โครงสร้างพื้นฐาน WU เดียวกันการดาวน์โหลดทั้งหมดผ่าน WU ไม่ใช่เครื่องมือดาวน์โหลด

ผู้ใช้slavanapโพสต์เครื่องมือที่ 2 ในความคิดเห็นที่ช่วยให้คุณสามารถเลือกติดตั้งการปรับปรุง มันเรียกว่าการปรับปรุงด้วยตนเองของ Windows10 และมีให้ใน github :

ป้อนคำอธิบายรูปภาพที่นี่.

ในการอัปเดตผู้สร้าง Windows 10 มีตัวเลือกให้หยุดการอัปเดต Windows เป็นเวลา 35 วัน:

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่

ภายใต้การตั้งค่าแอพซึ่งเป็นตัวเลือกของ Windows Update


2
ถ้าคุณมี Home edition?
พันเอก Panic

1
@ColonelPanic พยายามที่จะตั้งค่าAUOptionsภายใต้HKEY_LOCAL_MACHINE \ Software \ Policies \ Microsoft \ Windows \ WindowsUpdate \ AUไป2 มันใช้ได้ไหม?
magicandre1981

1
ฉันไม่คิดว่า MiniTool เป็นโอเพ่นซอร์ส โปรดดูที่มาเปิดนี้ทางออกที่ง่ายที่สุดวิธีการดำเนินการของ Windows 10 ปรับปรุงบำรุงรักษาที่คล้ายกับ Windows รุ่นซุยgithub.com/slavanap/Windows10ManualUpdate
สลา Napadovsky

3
@ magicandre1981 การก่อวินาศกรรม? นั่นไม่ใช่คำว่า "ขอบคุณ" สำหรับการซ่อมแซมลิงก์ที่ตายแล้ว

2
-1 ไม่ใช่เพราะมันเป็นความผิดของคุณ แต่เป็นเพราะคำตอบของคุณล้าสมัยแล้ว Windows จะเปิดใช้งาน Windows Update อีกครั้งในภายหลังแม้จะมีวิธีแก้ปัญหาแบบเดิมทั้งหมด
Mehrdad

10

หนึ่งในประเด็นที่ถกเถียงกันมากที่สุดเกี่ยวกับ Windows 10 คือการตัดสินใจของ Microsoft ในการทำการปรับปรุงที่จำเป็น หากคุณมี Windows 10 Pro, องค์กรหรือการศึกษารุ่นที่คุณสามารถเลื่อนการปรับปรุงแต่คุณไม่สามารถปฏิเสธได้ทันที

ถ้าคุณไม่พอใจกับไมโครซอฟท์อย่างแข็งขันติดตั้งโปรแกรมปรับปรุงในระบบของคุณโดยไม่ต้องพูดของคุณคุณสามารถปิดกั้นฟังก์ชั่นนี้ใช้W10Privacy

หากคุณไม่เคยได้ยินโปรแกรมนี้มาก่อนจึงควรตรวจสอบให้ดีเพราะซอฟต์แวร์ให้คุณควบคุมฟังก์ชั่นความเป็นส่วนตัวมากมายของ Windows 10 ช่วยให้คุณสามารถป้องกันระบบปฏิบัติการสอดแนมในสิ่งที่คุณทำ ตัวเลือกมีรหัสสีเพื่อให้คุณสามารถดูได้อย่างรวดเร็วว่าสิ่งที่ปลอดภัยที่จะเปลี่ยน / ปิดการใช้งานหรือไม่

ในW10Privacy 2คุณสามารถตั้งค่าโปรแกรมให้ปิดใช้งานกลไกการอัพเดตของ Windows 10 และแทนที่ด้วยตัวเอง ผู้ใช้สามารถเลือกอัปเดตที่จะติดตั้งและเลือกได้ นี่ไม่ใช่สิ่งที่ทุกคนควรทำ แต่คุณสามารถย้อนกลับขั้นตอนต่าง ๆ ได้อย่างง่ายดาย

ก่อนที่คุณจะสามารถใช้ฟังก์ชั่นนี้คุณต้องดาวน์โหลดส่วนประกอบเพิ่มเติมบางอย่าง ทำตามขั้นตอนเหล่านี้:

  • ดาวน์โหลดW10Privacy 2และแตกไฟล์ในโฟลเดอร์ในฮาร์ดไดรฟ์ของคุณ
  • ดาวน์โหลดPsExec (เป็นส่วนหนึ่งของแพ็คเกจPsTools ) และคัดลอกลงในโฟลเดอร์ W10Privacy
  • ดาวน์โหลดWindows Update PowerShell ModuleจากTechnetและแตกไฟล์ไปยังโฟลเดอร์ย่อยในโฟลเดอร์ W10Privacy
  • คลิกขวาW10Privacy.exeและเลือก Run as administrator จากเมนูบริบท เลือกเพื่อสร้างจุดคืนค่าระบบ มันก็คุ้มค่าที่จะทำการสำรองระบบอย่างเต็มรูปแบบ (ในกรณี)
  • ไปที่ Extras> Windows Updates เพื่อจัดการกับตัวเลือกต่างๆ มีกล่องกาเครื่องหมายหกที่แตกต่างกัน ไม่มีการเปิดใช้งานโดยค่าเริ่มต้น พวกเขาคือ:
  • มีโมดูลการอัปเดต PSWindows (ต้องให้ผู้ใช้ก่อนหน้านี้ไปยังโฟลเดอร์ W10Privacy)
  • PsExec.exeในโฟลเดอร์ W10Privacy (ต้องระบุโดยผู้ใช้) W10 การปรับความเป็นส่วนตัวของโมดูล PSWindows-Update
  • กำหนดค่าเซิร์ฟเวอร์ WSUS ปลอม

  • W10Privacy ตั้งอยู่ในเส้นทาง / โฟลเดอร์โดยไม่มีช่องว่าง อย่าพิจารณาไดรเวอร์ใน Update Search

  • สมมติว่าคุณต้องการจัดการการอัปเดตด้วยตนเองให้ตรวจสอบห้าตัวเลือกแรก ตัวเลือกที่หกให้คุณเลือกว่าจะแสดงรายการไดรเวอร์พร้อมกับการอัพเดตหรือไม่ มันขึ้นอยู่กับคุณ
  • คลิกตั้งค่าการเปลี่ยนแปลงที่ตั้งไว้จากนั้นคลิกปุ่มเริ่มการตรวจสอบการอัปเดตแล้วคุณจะเห็นการอัปเดตใหม่ ๆ ที่ยังไม่ได้ติดตั้งและสามารถเลือกการกระทำที่จะดำเนินการ

ภาพหน้าจอ

เมื่อคุณรับผิดชอบการอัปเดตของคุณให้รันซอฟต์แวร์เป็นประจำและตรวจสอบเพื่อให้แน่ใจว่าคุณจะไม่พลาดการอัปเดตที่สำคัญ

ป้อนคำอธิบายรูปภาพที่นี่

เครดิต:

  1. วิธีควบคุมการอัพเดทอัตโนมัติของ Windows 10 ทั้งหมด

1
ทางออกที่ดีที่สุดเนื่องจากป้องกันไม่ให้ Windows เห็นการปรับปรุงเลย
Marcus

โอ้ไม่ .. ทำไมไม่มีคำสั่งเดียว ใครบางคนให้ฉันที่ประตูหน้าต่างนี้สูงเพื่อเดินไปรอบ ๆ
Mustkeem K

6

ด้วยความช่วยเหลือของ @Ramhound ฉันสามารถหาวิธีหยุดการอัพเดตอัตโนมัติใน windows 10 ได้

โปรดทราบว่าสิ่งนี้ใช้ได้กับWindows 10 Proเนื่องจากเป็นรุ่นที่ฉันใช้งานอยู่

หากต้องการหยุดการอัปเดตอัตโนมัติคุณสามารถทำสิ่งต่อไปนี้:

  1. เปิดการตั้งค่า
  2. คลิกที่อัพเดตและความปลอดภัย
  3. คลิกที่ Advanced options ป้อนคำอธิบายรูปภาพที่นี่
  4. ตรวจสอบให้แน่ใจDefer upgradesตัวเลือก ป้อนคำอธิบายรูปภาพที่นี่
  5. ปิดหน้าต่างการตั้งค่าและคุณทำเสร็จแล้ว!

ปรับปรุง

ตามที่ระบุไว้ในความคิดเห็นโดย @Vinayak ตัวเลือกการเลื่อนเวลานี้มีให้สำหรับผู้ใช้ที่บ้านด้วย ข้อมูลเพิ่มเติมที่นี่


ในขณะที่คุณอยู่ที่นั่นคุณจะเห็นหรือไม่ว่ามีบริการอัปเดต windows ที่สามารถปิดการใช้งานในบริการได้ Wuauserv หรือ wuaueng.dll หรืออะไร? สำหรับผู้ที่อาจใช้วิธีอื่น
Psycogeek

1
Wuauservบริการ@Psycogeek อยู่ที่นั่นและสามารถหยุด / ปิดการใช้งานได้ นี่คือวิธีที่ฉันหยุดการปรับปรุงครั้งแรก
Izzy

5
เว็บส่วนใหญ่ทำให้เกิดเสียงราวกับว่าโลกจะหยุดหมุนถ้าการปรับปรุง windows 10 หยุดลง :-) และวิธีการที่ปุ่มไม่มีในบางรุ่น ฉันสมมติว่าคุณไม่ได้มีปัญหาอะไรกับเรื่องนี้? ตำรวจในฝันไม่บุกรุกฝันร้ายของคุณระบบปฏิบัติการไม่พังลงไปในลูกบอลและสัตว์เลี้ยงไม่ได้รับอันตรายในกระบวนการ :-) ฉันคิดว่าคำถาม & คำตอบที่นี่ทำได้ดีมากและสามารถนำมาใช้ใหม่สำหรับการควบคุมการอัปเดต W10 ที่คล้ายกัน คำถาม
Psycogeek

5
โปรดทราบว่าไมโครซอฟท์ยุบและตอนนี้อัพเกรด Defer สามารถใช้ได้สำหรับ Windows ผู้ใช้ 10 คนแรกเช่นกัน
Vinayak

1
deferหยุดการอัปเกรดเป็นเวอร์ชันที่ใหม่กว่าเช่น 1511 (อัปเดตพฤศจิกายน 2558) หรือ 1607 (อัปเดตครบรอบปีในเดือนกรกฎาคม 2559) และช่วยให้คุณได้รับการอัปเดตอัตโนมัติสำหรับเวอร์ชันที่เก่ากว่า
magicandre1981

4

windows_update_toggle
การทำซ้ำชุดไฟล์ชุดก่อนหน้าสลับเป็นชุดใหญ่เป็นสคริปต์เดียวโดยมีการปิดกั้นแนวปฏิบัติที่ดีที่สุด!
รับชมได้จริง

เดสก์ท็อปคลิกขวาเมนูบริบท UI แบบไดนามิกพร้อมสลับทุกอย่าง!
สลับเปิด / ปิดบล็อกทั้งหมดต่ออายุ (จาก Pastebin) หรือถอนการติดตั้งสคริปต์

ซ่อน / เลิกซ่อน / ติดตั้งรายการอัพเดทพร้อมเคาน์เตอร์!
รายการจะได้รับการอัปเดตโดยอัตโนมัติเมื่อใดก็ตามที่ Windows จะรบกวนคุณผ่านทาง MusNotification!

บล็อกการอัปเกรด Build, ติดตั้งอัตโนมัติ, ดาวน์โหลด, บริการ
บล็อก IFEO อย่างปลอดภัยโดยไม่มีการเปลี่ยนแปลงการเป็นเจ้าของลบไฟล์หรือลบงาน

มุ่งเน้นไปที่การอัปเดต Defender ทำงานอย่างอิสระการ
ปิดหน้าต่างการทำร้ายร่างกายโดยอัตโนมัติจะไม่ทำให้เลเยอร์การป้องกันในตัว
แตกต่างจาก -DIY- อัปเดต "การจัดการ" อื่น ๆ

windows_update_toggle.bat

@set @version=10.0 /* &title Windows Update Toggle
@echo off &set "verbose="
echo.
echo      ---------------------------------------------------------------------
echo     :                  Windows Update Toggle v10.0 final                  :
echo     :---------------------------------------------------------------------:
echo     :      Block/Enable Upgrades, Installs, Downloads(!), Service(!)      :
echo     :         Disable/Enable Reporting, Speech, SearchUI, Defender        :
echo     :        Hide/Unhide/Apply update lists with count and max size       :
echo     :       Preset for Defender updates and Store downloads working       :
echo     :                                                                     :
echo     :     Toggle from the comfort of Desktop right-click context menu     :
echo      ---------------------------------------------------------------------
echo.
:: AveYo, 2018-05-13

if %1.==. timeout /t 10 &call wscript /e:JScript "%~f0" runas setup &exit/b &rem : no arguments, run setup elevated
if %1.==shift. shift &shift &rem : if loaded by WScript, shift args to prevent loop and restore %0
if %1.==. echo ERROR! &timeout /t 5 &exit/b : must have at least one arg

:: Setup executable blocking via ifeo
set notifier=EOSNotify MusNotification
set upgrader=Windows10UpgraderApp Windows10Upgrade WindowsUpdateBox SetupHost setupprep
set installer=wuauclt
set reporter=wermgr wsqmcons DiagTrackRunner DiagnosticsHub.StandardCollector.Service CompatTelRunner
set speecher=SpeechRuntime SpeechModelDownload
set searcher=SearchUI

set "exe=%notifier% %upgrader% %installer% %reporter%"
set "noop=%SystemRoot%\system32\systray.exe"
set "ifeo=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options"
set "menu=HKCR\DesktopBackground\shell\WUT"
set "f0=%SystemRoot%\windows_update_toggle.bat"
set "task=wscript.exe /e:JScript \"%f0%\" schtasks WUT"
set "DefMUS={MicrosoftUpdateServer|MMPC|InternalDefinitionUpdateServer}"
set "DefMMPC={MMPC|MicrosoftUpdateServer|InternalDefinitionUpdateServer}"
set ".=>nul 2>nul"
for /f "tokens=2 delims=1234567890" %%# in ('shutdown /?^|findstr /bc:"E"') do set "[T]=%%#" &rem : cosmetic usage in menus
if defined verbose (echo on &set ".=" &set "window=") else set "window=hide"
call :%~1 %2 %3 %4 %5 %6 %7 %8 %9 &rem : launch secondary functions below dinamically, passing next args
echo.
echo Done! Use the Desktop right-click context menu to toggle, renew or uninstall
if "%~1"=="setup" (pause) else if defined verbose timeout /t 5
exit/b : End of main script, functions below

:refresh context menu
echo %0 %*
call :reg_query "HKLM\SOFTWARE\WUT.bat" NoBlock noblock
if "%noblock%"=="Enable" exit/b
call :reg_query "%menu%0pending" MUIVerb pending
if defined pending exit/b
for %%# in ("1hide" "2unhide" "3apply") do reg delete "%menu%%%~#" /f %.%
reg add "%menu%0pending" /v MUIVerb /d "Pending.." /f %.%
reg add "%menu%0pending" /v SubCommands /d "" /f %.%
call :reg_query "HKLM\SOFTWARE\WUT.bat" NoRefresh norefresh
if "%norefresh%"=="Disable" start "WUT" wscript /e:JScript "%f0%" WUTRefresh
call :status SetupHost
reg add "%menu%\shell\3Upgrades"   /v MUIVerb /d "Upgrades %[T]% [setuphost]    %toggle%" /f %.%
reg add "%menu%\shell\3Upgrades\command" /ve /d "%task%\upgrades" /f %.%
call :status wuauclt
reg add "%menu%\shell\4Installs"   /v MUIVerb /d "Installs %[T]% [wuauclt]    %toggle%" /f %.%
reg add "%menu%\shell\4Installs\command" /ve /d "%task%\installs" /f %.%
for /f "tokens=3" %%# in ('sc qc TrustedInstaller ^| find /I "WUTblocked"') do set "blocked=%%#"
if /i "%blocked%"=="[WUTblocked]" (set "toggle=blocked") else set "toggle=enabled"
reg add "%menu%\shell\5Downloads"  /v MUIVerb /d "Downloads ( ! ) %[T]% [trustedinstaller]    %toggle%" /f %.%
reg add "%menu%\shell\5Downloads\command" /ve /d "%task%\downloads" /f %.%
for /f "tokens=3" %%# in ('sc qc wuauserv ^| find /I "WUTblocked"') do set "blocked=%%#"
if /i "%blocked%"=="rpcss[WUTblocked]" (set "toggle=blocked") else set "toggle=enabled"
reg add "%menu%\shell\6Service"    /v MUIVerb /d "Service ( ! ) %[T]% [wuauserv]    %toggle%" /f %.%
reg add "%menu%\shell\6Service\command" /ve /d "%task%\service" /f %.%
call :status wermgr
reg add "%menu%\shell\81Report"    /v MUIVerb /d "Report    %[T]% %toggle%" /f %.%
reg add "%menu%\shell\81Report\command" /ve /d "%task%\report" /f %.%
call :status SpeechRuntime
reg add "%menu%\shell\82Speech"    /v MUIVerb /d "Speech    %[T]% %toggle%" /f %.%
reg add "%menu%\shell\82Speech\command" /ve /d "%task%\speech" /f %.%
call :status SearchUI
reg add "%menu%\shell\83Search"    /v MUIVerb /d "SearchUI  %[T]% %toggle%" /f %.%
reg add "%menu%\shell\83Search\command" /ve /d "%task%\search" /f %.%
set "defstatus=if((Get-MpPreference).DisableRealtimeMonitoring){write-host stopped}else{write-host enabled}"
for /f "delims=" %%# in ('call powershell.exe -c "%defstatus%;"') do set "toggle=%%#"
reg add "%menu%\shell\84Defender"  /v MUIVerb /d "Defender  %[T]% %toggle%" /f %.%
reg add "%menu%\shell\84Defender\command" /ve /d "%task%\defender" /f %.%
if "%norefresh%"=="Enable" reg delete "%menu%0pending" /f %.%
exit/b

:toggle WUT
echo %0 %*
call :reg_query "HKLM\SOFTWARE\WUT.bat" NoBlock noblock
if "%noblock%"=="Disable" (set "toggle=Enable") else set "toggle=Disable"
for %%# in (NoBlock NoRefresh) do reg add "HKLM\SOFTWARE\WUT.bat" /v %%# /d "%toggle%" /f %.%
:: Generate WUT main context menu
for %%# in ("" "0pending" "1hide" "2unhide" "3apply") do reg delete "%menu%%%~#" /f %.%
reg add "%menu%" /v MUIVerb /d "Windows Update Toggle" /f %.%
reg add "%menu%" /v Icon /d "appwiz.cpl,5" /f %.%
reg add "%menu%" /v SubCommands /d "" /f %.%
reg add "%menu%\shell\9Setup" /v MUIVerb /d "windows_update_toggle.bat v10.0" /f %.%
reg add "%menu%\shell\9Setup" /v SubCommands /d "" /f %.%
reg add "%menu%\shell\9Setup\shell\1Toggle" /v MUIVerb /d "%toggle%" /f %.%
reg add "%menu%\shell\9Setup\shell\2Renew"  /v MUIVerb /d "Renew" /f %.%
reg add "%menu%\shell\9Setup\shell\3Remove" /v MUIVerb /d "Remove" /f %.%
reg add "%menu%\shell\9Setup\shell\1Toggle\command" /ve /d "%task%\toggle" /f %.%
reg add "%menu%\shell\9Setup\shell\2Renew\command"  /ve /d "%task%\renew" /f %.%
reg add "%menu%\shell\9Setup\shell\3Remove\command" /ve /d "%task%\remove" /f %.%
if "%toggle%"=="Disable" (
 reg add "%menu%\shell\1Refresh" /v MUIVerb /d "Refresh" /f %.%
 reg add "%menu%\shell\1Refresh\command" /ve /d "%task%\refresh" /f %.%
 reg add "%menu%\shell\2Lists" /v MUIVerb /d "Hide / Unhide / Apply %[T]% enabled" /f %.%
 reg add "%menu%\shell\2Lists\command" /ve /d "%task%\lists" /f %.%
 reg add "%menu%\shell\7Repair"     /v MUIVerb /d "Troubleshooter" /f %.%
 reg add "%menu%\shell\7Repair\command" /ve /d "%task%\repair" /f %.%
)
:: Disabling automatic updates hinders Defender, so get definitions from MMPC first
if "%toggle%"=="Enable" ( set "DefSig=%DefMUS%" ) else set "DefSig=%DefMMPC%"
start "WUT:MpPref" wscript /e:JScript "%~f0" cmd "powershell.exe -c `Set-MpPreference -SignatureFallbackOrder %DefSig%;`"
:: Default services
sc config wuauserv type= share depend= rpcss %.%
sc config TrustedInstaller type= own depend= / %.%
:: Toggle ifeo exe blocking
for %%# in (%exe% %speech% %search%) do reg delete "%ifeo%\%%#.exe" /f %.%
if "%toggle%"=="Enable" exit/b WUT disabled, so skip the code below
for %%# in (%exe%) do reg add "%ifeo%\%%#.exe" /v Debugger /d "%noop%" /f %.% &taskkill /im "%%#.exe" /t /f %.%
:: WUTRefresh hijacking
for %%# in (MusNotification EOSNotify) do reg add "%ifeo%\%%#.exe" /v Debugger /d "%SystemRoot%\WUTRefresh.bat" /f %.%
call :refresh menu
exit/b

:hide update
echo %0 %*
call :reg_query "%menu%1hide\shell\%~1" MUIVerb updatefound
echo -%updatefound%
if not defined updatefound exit/b
call wscript /e:JScript "%f0%" hide "%updatefound%"
exit/b

:unhide update
echo %0 %*
call :reg_query "%menu%2unhide\shell\%~1" MUIVerb updatefound
echo -%updatefound%
if not defined updatefound exit/b
call wscript /e:JScript "%f0%" unhide "%updatefound%"
exit/b

:apply update
echo %0 %*
call :reg_query "%menu%3apply\shell\%~1" MUIVerb updatefound
echo -%updatefound%
if not defined updatefound exit/b
:: Temporarily unblock downloads and installs
call :reg_query "%ifeo%\wuauclt.exe" Debugger installs_blocked
for /f "tokens=3" %%# in ('sc qc TrustedInstaller ^| find /I "WUTblocked"') do set "downloads_blocked=%%#"
call wscript /e:JScript "%f0%" apply "%updatefound%"
:: Restore block
if defined installs_blocked reg add "%ifeo%\wuauclt.exe" /v Debugger /d "%noop%" /f %.% &taskkill /im "wuauclt.exe" /t /f %.%
if defined downloads_blocked sc config TrustedInstaller type= own depend= [WUTblocked] %.%
exit/b

:lists
echo %0 %*
call :reg_query "HKLM\SOFTWARE\WUT.bat" NoRefresh norefresh
if "%norefresh%"=="Disable" ( set "norefresh=Enable" &set "toggle=disabled") else set "norefresh=Disable" &set "toggle=enabled"
reg add "HKLM\SOFTWARE\WUT.bat" /v NoRefresh /d "%norefresh%" /f %.%
reg add "%menu%\shell\2Lists" /v MUIVerb /d "Hide / Unhide / Apply %[T]% %toggle%" /f %.%
reg add "%menu%\shell\1Refresh" /v MUIVerb /d "Refresh" /f %.%
reg add "%menu%\shell\1Refresh\command" /ve /d "%task%\refresh" /f %.%
if "%norefresh%"=="Enable" (
 reg delete "%menu%0pending" /f %.% &reg delete "%menu%1hide" /f %.% &reg delete "%menu%2unhide" /f %.%
 reg delete "%menu%3apply" /f %.% &reg delete "%menu%\shell\1Refresh" /f %.%
)
call :refresh lists
exit/b

:upgrades
echo %0 %*
call :flip SetupHost
reg add "%menu%\shell\3Upgrades"   /v MUIVerb /d "Upgrades %[T]% [setuphost]    %toggle%" /f %.%
for %%# in (%upgrader%) do if defined block (
 reg delete "%ifeo%\%%#.exe" /f %.%
) else (
 reg add "%ifeo%\%%#.exe" /v Debugger /d "%noop%" /f %.% &taskkill /im "%%#.exe" /t /f %.%
)
exit/b

:installs
echo %0 %*
call :flip wuauclt
reg add "%menu%\shell\4Installs"   /v MUIVerb /d "Installs %[T]% [wuauclt]    %toggle%" /f %.%
for %%# in (%installer%) do if defined block (
 do reg delete "%ifeo%\%%#.exe" /f %.% &start "wt" wscript /e:JScript "%f0%" WUTRefresh
) else (
 reg add "%ifeo%\%%#.exe" /v Debugger /d "%SystemRoot%\WUTRefresh.bat" /f %.% &taskkill /im "%%#.exe" /t /f %.%
)
exit/b

:downloads
echo %0 %*
call :reg_query "%menu%3apply" MUIVerb pending
set "reboot=%pending:reboot=%"
if defined pending if "%pending%"=="%reboot%" set "pending="
if defined pending (
 sc config TrustedInstaller type= own depend= / %.%
 reg add "%menu%\shell\5Downloads" /v MUIVerb /d "Downloads ( ! ) %[T]% [trustedinstaller]    reboot?" /f %.%
 exit/b
)
for /f "tokens=3" %%# in ('sc qc TrustedInstaller ^| find /I "WUTblocked"') do set "blocked=%%#"
if /i "%blocked%"=="[WUTblocked]" (set "blocked=/") else set "blocked=[WUTblocked]"
net stop TrustedInstaller /y %.%
for /f "tokens=3" %%# in ('sc queryex TrustedInstaller ^| find /i "PID"') do set "pid=%#"
if not "%pid%"=="0" taskkill /pid %pid% /f %.%
sc config TrustedInstaller type= own depend= %blocked% %.%
tasklist /svc | find /i "TrustedInstaller" %.%
if errorlevel 1 net start TrustedInstaller /y %.%
if errorlevel 1 (set "toggle=blocked") else set "toggle=enabled"
reg add "%menu%\shell\5Downloads" /v MUIVerb /d "Downloads ( ! ) %[T]% [trustedinstaller]    %toggle%" /f %.%
if "%toggle%"=="enabled" start "WUT" wscript /e:JScript "%f0%" WUTRefresh
exit/b

:service
echo %0 %*
for /f "tokens=3" %%# in ('sc qc wuauserv ^| find /I "WUTblocked"') do set "blocked=%%#"
if /i "%blocked%"=="rpcss[WUTblocked]" (set "blocked=rpcss") else set "blocked=rpcss[WUTblocked]"
net stop wuauserv /y %.%
for /f "tokens=3" %%# in ('sc queryex wuauserv ^| find /i "PID"') do set "pid=%#"
if not "%pid%"=="0" taskkill /pid %pid% /f %.%
sc config wuauserv type= share depend= %blocked% %.%
tasklist /svc | find /i "wuauserv" %.%
if errorlevel 1 net start wuauserv /y %.%
if errorlevel 1 (set "toggle=blocked") else set "toggle=enabled"
reg add "%menu%\shell\6Service" /v MUIVerb /d "Service ( ! ) %[T]% [wuauserv]    %toggle%" /f %.%
if "%toggle%"=="enabled" start "WUT" wscript /e:JScript "%f0%" WUTRefresh
exit/b

:repair
echo %0 %*
:: Restore services (undo only the changes made by this script, not whatever blocking was done by other means)
sc config wuauserv type= share depend= rpcss %.%
sc config TrustedInstaller type= own depend= / %.%
:: Remove any IFEO blocking done by past scripts
set eo=DiagnosticsHub.StandardCollector.Service WindowsUpdateElevatedInstaller LocationNotificationWindows InstallAgentUserBroker
set eo=%eo% UpdateNotificationMgr DataUsageLiveTileTask Windows10UpgraderApp WindowsActionDialog SpeechModelDownload WerFaultSecure
set eo=%eo% GetCurrentRollback WindowsUpdateBox Windows10Upgrade TrustedInstaller MusNotification DiagTrackRunner CompatTelRunner
set eo=%eo% WinREBootApp64 WinREBootApp32 UNPUXLauncher SpeechRuntime MusNotifyIcon PilotshubApp InstallAgent dstokenclean wsqmcons
set eo=%eo% disksnapshot osrssupdate wuapihost WaaSMedic UsoClient UNPUXHost SIHClient setupprep SetupHost osrssinst EOSNotify wusa
set eo=%eo% WerFault TiWorker SearchUI DWTRIG20 dusmtask dmclient appidtel wuauclt wermgr DFDWiz remsh reach HxTsr DWWIN DW20 GWX
for %%# in (%eo%) do reg delete "%ifeo%\%%#.exe" /f %.%
:: Restore notification hijacking
>"%SystemRoot%\WUTRefresh.bat" echo/@start "WUTRefresh" /min wscript.exe /e:JScript "%f0%" WUTRefresh
for %%# in (MusNotification EOSNotify) do reg add "%ifeo%\%%#.exe" /v Debugger /d "%SystemRoot%\WUTRefresh.bat" /f %.%
:: Remove pending instance safeguard
reg delete "HKLM\SOFTWARE\WUT.bat" /v Pending /f %.%
:: Refresh menu
call :refresh repair
:: Open Update Diagnostic
start "wud" msdt.exe /id WindowsUpdateDiagnostic %.%
:: Open official update troubleshooter page
start https://support.microsoft.com/en-us/help/4027322/windows-update-troubleshooter %.%
exit/b

:report
echo %0 %*
call :flip wermgr
reg add "%menu%\shell\81Report"    /v MUIVerb /d "Report    %[T]% %toggle%" /f %.%
for %%# in (%reporter%) do if defined block ( reg delete "%ifeo%\%%#.exe" /f %.% ) else (
 reg add "%ifeo%\%%#.exe" /v Debugger /d "%noop%" /f %.% &taskkill /im "%%#.exe" /t /f %.%
)
exit/b

:speech
echo %0 %*
call :flip SpeechRuntime
reg add "%menu%\shell\82Speech"    /v MUIVerb /d "Speech    %[T]% %toggle%" /f %.%
for %%# in (%speecher%) do if defined block ( reg delete "%ifeo%\%%#.exe" /f %.% ) else (
 reg add "%ifeo%\%%#.exe" /v Debugger /d "%noop%" /f %.% &taskkill /im "%%#.exe" /t /f %.%
)
exit/b

:search
echo %0 %*
call :flip SearchUI
reg add "%menu%\shell\83Search"    /v MUIVerb /d "SearchUI  %[T]% %toggle%" /f %.%
for %%# in (%searcher%) do if defined block ( reg delete "%ifeo%\%%#.exe" /f %.% ) else (
 reg add "%ifeo%\%%#.exe" /v Debugger /d "%noop%" /f %.% &taskkill /im "%%#.exe" /t /f %.%
)
exit/b

:defender
echo %0 %*
set "s10=$t=1;$toggle='stopped'; if((Get-MpPreference).DisableRealtimeMonitoring){$t=0;$toggle='enabled';}"
set "s11=Set-MpPreference -DisableRealtimeMonitoring $t"
set "s12=Set-MpPreference -DisableBehaviorMonitoring $t"
set "s13=Set-MpPreference -DisableIOAVProtection $t"
set "s14=write-host $toggle"
for /f "delims=" %%# in ('call powershell.exe -c "%s10%;%s11%;%s12%;%s13%;%s14%;"') do set "toggle=%%#"
reg add "%menu%\shell\84Defender"  /v MUIVerb /d "Defender  %[T]% %toggle%" /f %.%
exit/b

:update_defender - triggered from WScript to get definitions from MMPC, regardless of updates being blocked
tasklist /FI "IMAGENAME eq MpCmdRun.exe" | find ".exe" %.%
if not errorlevel 1 exit/b
pushd %ProgramFiles%\Windows Defender
call MpCmdRun.exe -removedefinitions -dynamicsignatures
call MpCmdRun.exe -SignatureUpdate -MMPC
exit/b

:setup
echo %0 %*
pushd %SystemRoot%
if /i "%~f0"=="%f0%" (set "initial_setup=") else copy /y "%~f0" "%f0%" %.%
:: Create WUTUndo for emergencies
 >WUTUndo.bat echo/pushd %%~dp0system32\config
>>WUTUndo.bat echo/reg load HKLM\WUTUndo1 SOFTWARE
>>WUTUndo.bat echo/set "koff=HKLM\WUTUndo1\Microsoft\Windows NT\CurrentVersion\Image File Execution Options" ^&set "kon=%ifeo%"
>>WUTUndo.bat echo/for %%%%B in (%exe%) do for %%%%K in ("%%koff%%" "%%kon%%") do reg delete "%%%%~K\%%%%B.exe" /f 2^>nul
>>WUTUndo.bat echo/reg unload HKLM\WUTUndo1
>>WUTUndo.bat echo/reg load HKLM\WUTUndo2 SYSTEM
>>WUTUndo.bat echo/for %%%%K in (WUTUndo2 SYSTEM) do (
>>WUTUndo.bat echo/ reg delete "HKLM\%%%%~K\ControlSet001\Services\TrustedInstaller" /v DependOnService /f 2^>nul
>>WUTUndo.bat echo/ reg delete "HKLM\%%%%~K\CurrentControlSet\Services\TrustedInstaller" /v DependOnService /f 2^>nul
>>WUTUndo.bat echo/)
>>WUTUndo.bat echo/reg unload HKLM\WUTUndo2
:: Create WUTRefresh to hijack update notifications and refresh context menu in addition to preventing forced reboots
>WUTRefresh.bat echo/@start "WUTRefresh" /min wscript.exe /e:JScript "%f0%" WUTRefresh
:: Create tasks to run context menu entries with proper access and no output window
start "WUT" wscript /e:JScript "%~f0" cmd "call `%~f0` setup_schtasks"
:: WUT options
for %%# in (NoBlock NoRefresh) do reg add "HKLM\SOFTWARE\WUT.bat" /v %%# /d "Enable" /f %.%
call :toggle blocking
exit/b

:setup_schtasks - no stalling separate process
set "strun=wscript.exe /e:JScript \"%f0%\" run%window%"
for %%t in (refresh lists upgrades installs downloads service repair report speech search defender toggle renew remove) do (
 schtasks /create /ru "%username%" /sc once /tn "WUT\%%t" /tr "%strun% %%t" /st "00:00:00" /it /rl highest /f %.%
)
for %%t in (hide unhide apply) do for /l %%n in (101,1,116) do (
 schtasks /create /ru "%username%" /sc once /tn "WUT\%%t\%%n" /tr "%strun% %%t %%n" /st "00:00:00" /it /rl highest /f %.%
)
exit/b

:renew
echo %0 %*
echo Renewing from internet - old version saved as %SystemRoot%\WUT.old
pushd %SystemRoot%
if exist WUT.new del /f /q WUT.new %.%
call wscript /e:JScript "%~f0" renew "https://pastebin.com/raw/gNsLEWJe" "%SystemRoot%\WUT.new"
if exist WUT.new copy /y "%f0%" WUT.old %.% &copy /y WUT.new "%f0%" %.% &del /f /q WUT.new %.%
start "WUT" "%f0%" setup renew %.%
exit/b

:remove
echo %0 %*
for %%# in (NoBlock NoRefresh) do reg add "HKLM\SOFTWARE\WUT.bat" /v %%# /d "Disable" /f %.%
call :toggle off
reg delete "HKLM\SOFTWARE\WUT.bat" /f %.%
for %%# in ("" "0pending" "1hide" "2unhide" "3apply") do reg delete "%menu%%%~#" /f %.%
for %%t in (refresh lists upgrades installs downloads service repair report speech search defender toggle renew remove) do (
 schtasks /delete /tn "WUT\%%t" /f %.%
)
for %%t in (hide unhide apply) do for /l %%n in (101,1,116) do schtasks /delete /tn "WUT\%%t\%%n" /f %.%
for %%t in (hide unhide apply) do schtasks /delete /tn "WUT\%%t" /f %.%
schtasks /delete /tn "WUT" /f %.%
sc config wuauserv type= share depend= rpcss %.%
sc config TrustedInstaller type= own depend= / %.%
pushd %SystemRoot%
del /f /q WUT.bat WUT.old DefenderManualUpdate.bat WUTRefresh.bat WUTUndo.bat "%f0%" %.%
exit/b

:flip %1:exe
call :reg_query "%ifeo%\%~1.exe" Debugger block
if defined block (set "toggle=enabled") else set "toggle=blocked"
exit/b

:status %1:exe
call :reg_query "%ifeo%\%~1.exe" Debugger block
if defined block (set "toggle=blocked") else set "toggle=enabled"
exit/b

:reg_query %1:KeyName %2:ValueName %3:OutputVariable %4:other_options[example: "/t REG_DWORD"]
setlocal & for /f "skip=2 delims=" %%s in ('reg query "%~1" /v "%~2" /z 2^>nul') do set "rq=%%s" & call set "rv=%%rq:*)    =%%"
endlocal & set "%~3=%rv%" & exit/b &rem                                         AveYo: call :reg_query "HKCU\MyKey" "MyValue" MyVar

::---------------------------------------------------------------------------------------------------------------------------------
:JScript_functions                                                                 AveYo: Switch syntax highlighter to 'javascript'
::-------------------------------------------------------------------------------------------------------------------------------*/
f0=WSH.ScriptFullName; run=WSH.Arguments(0); args=''; for(i=1;i<WSH.Arguments.length;i++) args+=' "'+WSH.Arguments(i)+'"';
function sex(exe,args){WSH.CreateObject('Shell.Application').ShellExecute(exe,args,'','',0);}; function reg(s){ sex('reg.exe',s); }

// Open external commands in new hidden cmd instance - backquotes replaced to quotes
if (run=='cmd') sex('cmd','/c '+args.replace(/`/g,'"'));

// Context menu entries trigger - elevated with no popups
if (run=='schtasks') sex('SCHTASKS.EXE','/Run /TN '+args);

// Shift to CMD if loaded by WScript - pass arguments, prevent loop, run as admin at setup, hide window at context-menu
function cmd(adm,win){WSH.CreateObject('Shell.Application').ShellExecute('cmd','/c call "'+f0+'" shift "'+f0+'"'+args,'',adm,win);}
if (run=='run') cmd('',1); if (run=='runhide') cmd('',0); if (run=='runas') cmd('runas',1); if (run=='runashide') cmd('runas',0);

if (run=='renew') {
  // renew script over internet
  try{
  downloader=WSH.CreateObject("WinHttp.WinHttpRequest.5.1");
  if (downloader===null) downloader=WSH.CreateObject("WinHttp.WinHttpRequest");
  if (downloader===null) downloader=WSH.CreateObject("MSXML2.ServerXMLHTTP");
  if (downloader===null) downloader=WSH.CreateObject("Microsoft.XMLHTTP");
  downloader.Open("GET",WSH.Arguments(1),false); downloader.Send(); oASI=downloader.ResponseBody(); downloader=undefined;
  oASO=WSH.CreateObject("ADODB.Stream"); oASO.type=1; oASO.Mode=3; oASO.Open; oASO.Write(oASI); oASI=undefined;
  oASO.SaveToFile(WSH.Arguments(2)); oASO.Close();
  }catch(e){} // supress all errors since we're working with com objects
}

// WUT Hide/Unhide/Apply lists
if (run=='WUTRefresh' || run=='hide' || run=='unhide' || run=='apply') {
  SRP=GetObject("winmgmts:StdRegProv"); pending=SRP.GetStringValue(2147483650,'SOFTWARE\\WUT.bat','Pending');
  if (pending===0) WSH.quit(); else SRP.SetStringValue(2147483650,'SOFTWARE\\WUT.bat','Pending','yes'); // prevent instances
  k='HKCR\\DesktopBackground\\shell\\WUT'; hk=k+'1hide'; uk=k+'2unhide'; ik=k+'3apply'; pk=k+'0pending';           // set list keys
  reg('delete "'+hk+'" /f'); reg('delete "'+uk+'" /f'); reg('delete "'+ik+'" /f');                               // delete previous
  reg('add "'+pk+'" /v MUIVerb /d "Pending.." /f'); reg('add "'+pk+'" /v SubCommands /d "" /f');             // add Pending.. entry
  // Check for updates
  count=0; wuthide=[]; wutunhide=[];
  try{
  session=WSH.CreateObject("Microsoft.Update.Session"); reboot=WSH.CreateObject("Microsoft.Update.SystemInfo").RebootRequired;
  searcher=session.CreateUpdateSearcher();
  sresult=searcher.Search("IsInstalled=0"); Updatelist=sresult.Updates; count=sresult.Updates.Count;
  for(i=0;i<count;i++) {
    itemTitle=Updatelist.Item(i).Title;
    minsize=Updatelist.Item(i).MinDownloadSize; maxsize=Updatelist.Item(i).MaxDownloadSize; wutsize='';
    if (maxsize > 1073741824) wutsize=' ['+Math.round(minsize/10737418.24)/100+' - '+Math.round(maxsize/10737418.24)/100+'GB]';
    else if (maxsize > 1048576) wutsize=' ['+Math.round(minsize/10485.76)/100+' - '+Math.round(maxsize/10485.76)/100+'MB]';
    else if (maxsize > 1024) wutsize=' ['+Math.round(minsize/10.24)/100+' - '+Math.round(maxsize/10.24)/100+'KB]';
    else if (maxsize > 0) wutsize=' ['+(minsize)+' - '+(maxsize)+'B]';
    wutTitle=Updatelist.Item(i).Title + wutsize;
    if (run=='apply' && WSH.Arguments(1).indexOf(itemTitle) > -1) {
      // Add matching entry to UpdateColl
      UpdateColl=WSH.CreateObject("Microsoft.Update.UpdateColl"); UpdateColl.Add(Updatelist.Item(i));
      // Download update
      downloader=session.CreateUpdateDownloader(); downloader.Updates=UpdateColl; dresult=downloader.Download();
      if (dresult.ResultCode==2) {
        // Unblock apply
        sex('sc','config TrustedInstaller type= own depend= /');
        KeyPath='SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\wuauclt.exe';
        SRP.DeleteKey(2147483650,KeyPath);
        WSH.Sleep(1000);
        //Apply update
        installer=session.CreateUpdateInstaller(); installer.Updates=UpdateColl; iresult=installer.Install();
        if (iresult.ResultCode==2) continue;
      }
    }
    // hide and unhide are very simple bool flip compared to apply
    if (run=='hide' && WSH.Arguments(1).indexOf(itemTitle) > -1) {
      Updatelist.Item(i).IsHidden=true; wutunhide.push(wutTitle); continue;
    }
    if (run=='unhide' && WSH.Arguments(1).indexOf(itemTitle) > -1) {
      Updatelist.Item(i).IsHidden=false; wuthide.push(wutTitle); continue;
    }
    // Trigger :update_defender to manually refresh definitions from MMPC
    if (Updatelist.Item(i).IsHidden===false && itemTitle.indexOf('(Definition') > -1) {
      sex('cmd','/c call "'+f0+'" update_defender');
    }
    // Sorting lists
    if (Updatelist.Item(i).IsHidden) wutunhide.push(wutTitle); else wuthide.push(wutTitle);
  }
  // Generate Hide context menu
  if (wuthide.length>0){
    for(i=101,n=wuthide.length+101;i<n;i++) {
      reg('add "'+hk+'\\shell\\'+i+'" /v MUIVerb /d "'+wuthide[i-101]+'" /f');
      reg('add "'+hk+'\\shell\\'+i+'\\command" /ve /d "wscript.exe /e:JScript \\"'+f0+'\\" schtasks WUT\\hide\\'+i+'" /f');
    }
    reg('add "'+hk+'" /v SubCommands /d "" /f');
    reg('add "'+hk+'" /v MUIVerb /d "Hide '+"\t"+wuthide.length+'" /f');
  }
  // Generate Unhide context menu
  if (wutunhide.length>0){
    for(i=101,n=wutunhide.length+101;i<n;i++) {
      reg('add "'+uk+'\\shell\\'+i+'" /v MUIVerb /d "'+wutunhide[i-101]+'" /f');
      reg('add "'+uk+'\\shell\\'+i+'\\command" /ve /d "wscript.exe /e:JScript \\"'+f0+'\\" schtasks WUT\\unhide\\'+i+'" /f');
    }
    reg('add "'+uk+'" /v SubCommands /d "" /f');
    reg('add "'+uk+'" /v MUIVerb /d "Unhide '+"\t"+wutunhide.length+'" /f');
  }
  // Generate Apply context menu
  if (wuthide.length>0){
    for(i=101,n=wuthide.length+101;i<n;i++) {
      reg('add "'+ik+'\\shell\\'+i+'" /v MUIVerb /d "'+wuthide[i-101]+'" /f');
      reg('add "'+ik+'\\shell\\'+i+'\\command" /ve /d "wscript.exe /e:JScript \\"'+f0+'\\" schtasks WUT\\apply\\'+i+'" /f');
    }
    reg('add "'+ik+'" /v SubCommands /d "" /f');
    reg('add "'+ik+'" /v MUIVerb /d "Apply '+"\t"+((reboot) ? 'must reboot' : wuthide.length)+'" /f');
  }
  }catch(e){} // supress all errors since we're working with com objects
  reg('delete "'+pk+'" /f'); SRP.DeleteValue(2147483650,'SOFTWARE\\WUT.bat','Pending'); // Remove Pending.. temporary entry
}
//

อัปเดตล่าสุดสำหรับ v10.0 เป็นครั้งสุดท้าย รหัสที่ทันสมัยในลิงค์ pastebin ด้านบน


โอกาสใดที่คุณสามารถบอกฉันว่าคุณมีเมนู windows ของคุณให้มีพื้นหลังสีดำได้อย่างไร!
wayofthefuture

1
นั่นเป็นธีมที่มีความเปรียบต่างสูงมีให้ที่นี่: pastebin.com/fA3t5Sd2
AveYo

4

สำหรับผู้ใช้งาน Windows 10 Home

ลองใช้วิธีการต่อไปนี้จากของ Windows กลาง โดยทั่วไปคุณจะปิดใช้งานบริการรีบูตไม่ใช่บริการอัปเดต จากนั้นคุณสามารถรีบูตทุกครั้งที่คุณต้องการ โปรดทราบว่าคุณต้องมีสิทธิ์ผู้ดูแลระบบ แต่ฉันคิดว่าคุณมีมันแล้วตั้งแต่คุณใช้ Windows Home edition

  1. จากหน้าต่าง Windows explorer เปลี่ยนชื่อไฟล์: C:\Windows\System32\Tasks\Microsoft\Windows\UpdateOrchestrator\Reboot(สมมติว่าคุณ%windir%เป็นC:\) เพื่อ Reboot.old หมายเหตุคุณจะถูกขอให้เข้าถึงผู้ดูแลระบบที่นี่
  2. สร้างไดเรกทอรีชื่อในReboot C:\Windows\System32\Tasks\Microsoft\Windows\UpdateOrchestrator\การทำเช่นนี้จะช่วยป้องกันไม่ให้ windows สร้างไฟล์ใหม่ด้วยชื่อเดียวกัน หมายเหตุคุณจะถูกขอให้เข้าถึงผู้ดูแลระบบที่นี่
  3. รีบูทเครื่อง สิ่งนี้จะรีเซ็ตบริการทั้งหมดและป้องกันไม่ให้บริการเริ่มต้นใหม่

โปรดทราบว่านี่ไม่ได้รับการสนับสนุนโดย Microsoft แต่จากนั้นอีกครั้งทั้งสองไม่ได้ควบคุมคุณเป็นเจ้าของตารางการบูตดังนั้นใช้เวลา MS! อย่างจริงจังหากคุณไม่ทราบว่าคุณกำลังทำอะไรเข้าใจความเสี่ยงที่คุณกำลังทำอยู่โดยทำตามคำแนะนำจากอินเทอร์เน็ต แน่นอนว่ามันง่ายพอที่ความเข้าใจของ Windows 95 จะช่วยอธิบายสิ่งที่เกิดขึ้นที่นี่


3

สถานะของ Windows Update - เริ่มต้นปี 2019

Microsoft พยายามอย่างยิ่งที่จะทำให้ Windows Update เป็นสิ่งที่หลีกเลี่ยงไม่ได้ซึ่งเป็นสาเหตุที่วิธีการดั้งเดิมไม่ทำงานอีกต่อไปหรือทำงานได้ในระยะเวลาที่ จำกัด เท่านั้น

Microsoft ได้เพิ่มบริการระบบที่ไม่สามารถปิดการใช้งานโดยมีวัตถุประสงค์เพื่ออัปเดต Windows หัวหน้ากลุ่มเหล่านี้คือ Update Orchestrator Serviceซึ่งได้รับมอบหมายให้ดาวน์โหลดติดตั้งและตรวจสอบการปรับปรุง หากหยุดทำงานคอมพิวเตอร์จะไม่สามารถดาวน์โหลดและติดตั้งการอัปเดตได้อีกต่อไปซึ่งเป็นสาเหตุที่ทำให้ปิดใช้งานสำหรับเซสชันปัจจุบันเท่านั้นและจะเปิดใช้งานอีกครั้งในการรีบูตครั้งถัดไป

บริการที่คิดค่าบริการด้วยการทำให้ Windows Update ผ่านพ้นไม่ได้คือบริการWindows Update Medicใหม่ ซึ่งได้รับการมอบหมายให้ทำงาน Windows Update ได้ เป็นบริการที่ยกเลิกวิธีการดั้งเดิมทั้งหมดสำหรับการบล็อก Windows Update ดังนั้นจึงเป็นระยะ ๆ และไม่คาดคิดว่าจะพบว่าการตั้งค่า Windows Update ได้รับการรีเซ็ตเป็นค่าดั้งเดิมและ Windows ได้กลับไปบังคับให้มีการอัพเดทต่อผู้ใช้

Windows Update Medic Service ไม่สามารถปิดใช้งานได้เลย ความพยายามที่จะทำเช่นนั้นจะจบลงด้วยข้อความ "การเข้าถึงถูกปฏิเสธ"

แต่มีอยู่ผลิตภัณฑ์ของบุคคลที่สามที่ทั้งหมดสามารถป้องกัน Windows Update: Windows Update Blocker ผลิตภัณฑ์ฟรีนี้เป็นแบบพกพาและสามารถปิด / เปิดใช้งาน Windows Update ได้ด้วยคลิกเดียว ในความเป็นจริงมันสามารถบล็อกบริการ Windows ที่ไม่บล็อกได้อีกด้วย มีรายงานว่ายังทำงานได้ในปี 2561

การใช้ผลิตภัณฑ์ของบุคคลที่สามอาจยาวนานกว่าการใช้คุณสมบัติกึ่งเอกสารของ Windows ซึ่งอาจเปลี่ยนแปลงได้โดยไม่ต้องแจ้งให้ทราบล่วงหน้า ผลิตภัณฑ์ฟรีอีกจำนวนหนึ่งอาจพบได้ใน คำตอบ ของฉันซึ่งใช้ Windows API ที่อนุญาตให้โปรแกรมใด ๆ ยับยั้งการปิดที่กำลังจะเกิดขึ้น


2

ในที่สุดก็พบการแก้ไขแบบถาวรที่ใช้งานได้

หลังจากที่ได้ลองทุกเคล็ดลับในหนังสือฉันได้รับการปรับปรุงโดย Windows Update เสมอ ฉันได้ลองวิธีแก้ปัญหาทั้งหมดที่นี่รวมถึงแหล่งข้อมูลอื่น ๆ อีกมากมายและ Windows ก็พบวิธีที่จะขัดขวางแผนการของฉัน

จนกระทั่งประมาณ 6 เดือนที่แล้ว ...

ฉันพบวิธีแก้ไขปัญหาอย่างถาวรสำหรับการปิดการใช้งานการปรับปรุง windows ทั้งหมดตลอดกาลไม่ว่าจะให้บริการหรือสิ่งใดก็ตามที่กำลังทำงานอยู่ ฉันได้ค้นพบวิธีการนี้ด้วยความช่วยเหลือของแหล่งข้อมูลต่าง ๆ ที่เกี่ยวข้องกับสิ่งต่าง ๆ มากมาย โดยรวมแล้วฉันพบวิธีนี้ด้วยการใช้บิตและชิ้นส่วนของข้อมูลอื่น ๆ ที่ใช้ในการทำสิ่งต่าง ๆ ที่ไม่ได้เกี่ยวข้องกับสิ่งนี้ทั้งหมด แต่ใช้งานได้ และมันใช้งานได้อย่างสวยงามอย่างแน่นอน

  1. ติดตั้งAcrylic DNS Proxyจากที่นี่

โดยพื้นฐานแล้วไฟล์โฮสต์ windows ที่ได้รับการปรับปรุงจะช่วยให้คุณเพิ่มฟังก์ชั่นเช่น wildcard ซึ่งเป็นสิ่งจำเป็นในกรณีของเราเนื่องจากมีแหล่งข้อมูลมากมายที่ windows ได้รับการอัปเดต

  1. ทำตามคำแนะนำที่นี่เพื่อให้คริลิคเริ่มทำงานใน Win 10 สิ่งที่ค่อนข้างง่าย

  2. ไปที่เมนูเริ่มต้นของคุณแล้วคลิก " แก้ไขโฮสต์คริลิคไฟล์ " ภายใต้โปรแกรมทั้งหมดที่แสดงที่นี่

  3. เพิ่มบรรทัดเหล่านี้ที่ด้านล่างของไฟล์โฮสต์โดยไม่มีเครื่องหมาย # อยู่ด้านหน้า

0.0.0.0 windowsupdate.microsoft.com
0.0.0.0 * .windowsupdate.microsoft.com
0.0.0.0 * .update.microsoft.com
0.0.0.0 windowsupdate.microsoft.com
0.0.0.0 * .windowsupdate.com
0.0.0.0 download.windowsupdate.com
0.0.0.0 download.microsoft.com
0.0.0.0 *
.download.windowsupdate.com
0.0.0.0 wustat.windows.com 0.0.0.0 ntservicepack.microsoft.com
0.0.0.0 stats.microsoft.com

ตอนล่างของไฟล์ที่ควรมีลักษณะเช่นนี้ บันทึกและปิดไฟล์

  1. เปิดตัวจัดการงานไปที่แท็บบริการคลิก "เปิดบริการ" ที่ด้านล่างเลือกคลิลิก DNS DNSและคลิกที่ปุ่มนี้พร้อมวงกลมสีแดงเพื่อเริ่มบริการ

เสร็จ

ตอนนี้เป็นเพื่อนสนิทของคริลิคของคุณควรมีหลังของคุณและต่อเนื่องให้ตากระตือรือร้นในไมโครซอฟท์กลยุทธ์พี่ใหญ่ที่จะทำให้แน่ใจว่าพวกเขาไม่สามารถบังคับให้คนยากจนเก่าที่คุณติดตั้งโปรแกรมปรับปรุงที่เลอะเครื่องคอมพิวเตอร์ของคุณอย่างสมบูรณ์ซึ่งพวกเขามีอย่างน้อยหนึ่งในสี่ของเวลาที่พวกเขา ทำทั้งในพีซีที่บ้านและSurface Pro ซึ่งควรจะเป็น PC BUILT สำหรับ Windows ใช่มั้ย ??? Cmon, Microsoft!

  1. ตรวจสอบเพื่อให้แน่ใจว่าใช้งานได้โดยส่ง Ping เว็บไซต์ใดเว็บไซต์หนึ่งในรหัสด้านบน เปิด cmd และประเภท

ping windowsupdate.microsoft.com

หากนี่คือผลลัพธ์ของคุณคุณจะเป็นสีทองนับจากนี้ไป !!

หมายเหตุ: จากประสบการณ์ของฉันสิ่งนี้ไม่ได้ทำให้พีซีของฉันช้าเลย นอกจากนี้ยังไม่เปลี่ยนเส้นทางการรับส่งข้อมูลทางอินเทอร์เน็ตใด ๆ นอกเหนือจากการร้องขอไปยังแหล่งที่มาที่ Windows ใช้เพื่ออัปเดตหรือตรวจสอบการอัปเดตดังนั้นคล้ายกับไฟล์โฮสต์ นอกจากนี้ยังใช้รูปแบบเดียวกับไฟล์โฮสต์ นี่ยังประสบความสำเร็จในการปิดการใช้งานการติดตั้งขยะที่ windows เก็บไว้ในคอมพิวเตอร์ของฉันซึ่งทำให้หน้าจอสียักษ์พูดว่า "คุณต้องอัปเดตมิเช่นนั้นคอมพิวเตอร์จะระเบิด" เห็นได้ชัดว่าฉันจำสิ่งที่เตือนไม่ได้เพราะมันนานมากแล้วที่ฉันได้รับมัน (เนื่องจากประสบความสำเร็จในการบล็อค 6 เดือนก่อนหน้านี้) แต่มันเป็นสิ่งที่น่ารำคาญที่สุดที่ฉันเคยเห็น


ฮ่า ๆ ๆ ๆ. โอ้ผู้ชาย คำตอบนี้เป็นเพียง ว้าว. ฉลาด. ฉลาดมาก ฉันแค่ไม่สามารถเน้นว่าคำตอบนี้ดีเพียงใด ผู้คนหลายล้านมาที่ประตูหน้าซึ่งมีการป้องกันหลายร้อยครั้ง แต่วิธีการแก้ปัญหานี้มาที่ด้านข้างซึ่งไม่มีการป้องกันและการป้องกันอาคารจะเป็นไปไม่ได้เพราะการออกแบบอินเทอร์เน็ต
เทรเวอร์บอยด์สมิ ธ

หากคุณมีเราเตอร์แฟนซี / เกตเวย์ / เครือข่ายในบ้านพร้อมคุณสมบัติแฟนซี DNS ... จากนั้นคุณสามารถ IMO ทำสิ่งที่คล้ายกัน
เทรเวอร์บอยด์สมิ ธ

1

ปิดการใช้งาน Update Service

  1. Win+R > services.msc
  2. ดับเบิลคลิกที่ Windows Update และเปลี่ยนประเภทการเริ่มต้นเป็นปิดใช้งาน หากต้องการเปิดใช้งานอีกครั้งให้กลับไปที่บริการและเปลี่ยนเป็นอัตโนมัติ

ที่มา: วิธีควบคุมการอัพเดทของ Windows 10


1

สำหรับกรณีของฉันฉันไม่เพียงต้องการควบคุมเมื่อ Windows Update ทำงาน แต่ยัง จำกัด แอพพลิเคชั่นที่ติดตั้งทั้งหมดไม่ให้อยู่ในการควบคุมการอัพเดทออนไลน์

ดังนั้นโซลูชันแบบครบวงจรที่เรียบง่ายของฉันคือ: 1. Bloc การเข้าถึงอินเทอร์เน็ตสำหรับโฮสต์ที่ด้านเราเตอร์ ไม่มีโปรแกรมหรือบริการใดที่ติดตั้งบนโฮสต์ที่สามารถเข้าถึงอินเทอร์เน็ตได้ สาเหตุของการอัพเดต Windows ก็ถูกบล็อกด้วยเช่นกัน

  1. ติดตั้ง Squid Proxy Server บนเครือข่ายท้องถิ่นและมอบ proxy ให้กับแอพพลิเคชั่นที่คุณอนุญาตให้พวกเขาใช้งานอินเทอร์เน็ตได้ อย่าตั้งค่าพร็อกซีในแผงควบคุม | ตัวเลือกอินเทอร์เน็ตสาเหตุที่เป็นพร็อกซีระบบปฏิบัติการทั่วโลกซึ่งเปิดใช้งานขั้นตอนที่ 1 เลย

แอปพลิเคชันส่วนใหญ่รองรับการตั้งค่าพรอกซีตามแอพพลิเคชั่นเช่น Chrome, Firefox, เกมทุกประเภทเป็นต้น

  1. สำหรับแอปพลิเคชันที่ไม่รองรับการตั้งค่าพร็อกซีในเครื่องให้ใช้ NAS cloud fold เป็น Cloud Proxy ตัวอย่างเช่นชุด Office 365 ไม่สนับสนุนต่อพร็อกซีโปรแกรม จากนั้นคุณสามารถตั้งค่า NAS Cloud Sync (ตัวอย่างเช่น Synology NAS มีการซิงค์บนคลาวด์เพื่อซิงค์ OneDrive) เพื่อซิงค์เนื้อหาในการพับ NAS จากนั้นคุณใช้การหมอบแบบนั้นเป็นโฟลว์ภายในเครื่องของ Office 365 ประโยชน์พิเศษของวิธีนี้คือคุณได้รับการตอบสนองที่รวดเร็วในไฟล์ขนาดใหญ่ทำให้คุณใช้ความเร็วเครือข่ายท้องถิ่นเพื่อเข้าถึง OneDrive

ด้วยการทำเช่นนี้การเข้าถึงอินเทอร์เน็ตของคอมพิวเตอร์ของคุณจะถูกควบคุมด้วยตัวเองอย่างมากไม่มีใครทำให้คุณยุ่งเหยิงได้

เมื่อใดก็ตามที่คุณต้องการอัปเดต Windows ให้ตั้งแผงควบคุม | ตัวเลือกอินเทอร์เน็ตเพื่อใช้งานพรอกซีท้องถิ่นของคุณดังนั้น Windows สามารถอัปเดตระบบปฏิบัติการของคุณ หลังจากนั้นปิดพร็อกซีส่วนกลางทันทีเพื่อให้คอมพิวเตอร์ของคุณกลับสู่โลกที่สงบสุขอีกครั้ง


0

2 ปีต่อมาและผลงานที่ไม่ได้บันทึกนับพันล้านชิ้นหายไปโดยกลไกการอัพเดทของ Microsoft ในที่สุดก็มีการปรับปรุงครั้งใหญ่ที่สามารถแก้ไขปัญหาได้

มีการอัปเดต Windows 10 Creators ในขณะนี้ ( ดาวน์โหลดโดยตรง )

หลังจากติดตั้งการอัปเดตผู้ใช้จะถามอีกครั้งในที่สุด (เช่นผู้ที่ไม่มีนัยสำคัญ 20+ ปีก่อน) หากเขาต้องการให้มีการอัปเดต:

ข้อความอัปเดตเก่า win10 ใหม่

บางครั้งฉันสงสัยว่าใครอยู่เบื้องหลังการตัดสินใจเหล่านั้น ...

หลังจากอัปเดตคุณมีตัวเลือกเพิ่มเติมเกี่ยวกับเวลาอัปเดต สำหรับการหยุดพวกเขาให้ไปที่การตั้งค่าของ Windows Update> ตัวเลือกขั้นสูง> หยุดอัพเดท> ON

หยุดการอัปเดตชั่วคราว

ภายใต้ตัวเลือกการเริ่มต้นใหม่คุณจะพบตัวเลือกใหม่สำหรับการแจ้งเตือนการอัพเดท:

อัปเดตการแจ้งเตือน


1
สิ่งนี้ตอบคำถามได้อย่างไร
magicandre1981

"วิธีหยุดการอัปเดตอัตโนมัติ" - นี่เป็นวิธีหนึ่งในการกำจัดการอัปเดตอัตโนมัติที่บังคับ และสำหรับการหยุดไปที่การตั้งค่า Windows Update> ตัวเลือกขั้นสูง> หยุดการปรับปรุงชั่วคราว> เปิด ฉันได้เพิ่มสิ่งนี้ในคำตอบ (คุณมีตัวเลือกมากขึ้นหลังจาก Windows Update)
Kai Noack

0

ปิดการใช้งานการอัพเดท windows ทั้งหมดโดย PowerShell

(เรียกใช้ PowerShell ในฐานะผู้ดูแลระบบ)

Clear-Host

$WindowsUpdatePath = "HKLM:SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\"
$AutoUpdatePath = "HKLM:SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU"

If(Test-Path -Path $WindowsUpdatePath) {
    Remove-Item -Path $WindowsUpdatePath -Recurse
}

New-Item $WindowsUpdatePath -Force
New-Item $AutoUpdatePath -Force

Set-ItemProperty -Path $AutoUpdatePath -Name NoAutoUpdate -Value 1

Get-ScheduledTask -TaskPath "\Microsoft\Windows\WindowsUpdate\" | Disable-ScheduledTask

takeown /F C:\Windows\System32\Tasks\Microsoft\Windows\UpdateOrchestrator /A /R
icacls C:\Windows\System32\Tasks\Microsoft\Windows\UpdateOrchestrator /grant Administrators:F /T

Get-ScheduledTask -TaskPath "\Microsoft\Windows\UpdateOrchestrator\" | Disable-ScheduledTask

Stop-Service wuauserv
Set-Service wuauserv -StartupType Disabled

Write-Output "All Windows Updates were disabled"

0

แม้ว่าฉันจะปิดการใช้งานการอัปเดตในบริการและตัวแก้ไขนโยบายกลุ่ม แต่ก็ยังเปิดใช้งานได้เป็นระยะ จากนั้นฉันต้องปิดพวกเขาด้วยตนเองในบริการ การทำสิ่งนี้ผ่านทาง GUI นั้นลำบากดังนั้นฉันจึงเขียนสคริปต์แบทช์ จะหยุดและปิดการใช้งานและBackground Intelligent Transfer ServiceWindows Update

@echo off

net stop wuauserv
net stop BITS

sc config wuauserv start= disabled
sc config BITS start= disabled

pause

ฉันยังใช้ (ไม่ใช่เฉพาะสำหรับสิ่งนี้) เครื่องมือตรวจสอบเครือข่ายแบบเบา (Bandwidth Monitor) ดังนั้นฉันจึงรู้ว่าเมื่อใดที่มีกิจกรรม (ไอคอนที่ถาดระบบ) หากฉันเห็นกิจกรรมเมื่อไม่ควรมีฉันรู้ว่า Windows Update เปิดใช้งานอีกครั้ง จากนั้นฉันก็เรียกใช้สคริปต์และมันก็ปิด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.