commit 73a0a70e8d38ab40ee21fc4f0fae8fbda736223b Author: redL1nE87 <38399929+redL1nE87@users.noreply.github.com> Date: Fri Aug 21 07:50:40 2026 +0300 Create WU-Toggle diff --git a/WU-Toggle.ps1 b/WU-Toggle.ps1 new file mode 100644 index 0000000..4518434 --- /dev/null +++ b/WU-Toggle.ps1 @@ -0,0 +1,157 @@ +<# +.SYNOPSIS + Управление автообновлением Windows 11 Pro 25H2 — полное отключение/включение. + +.DESCRIPTION + Скрипт управляет автоматическим обновлением Windows через три уровня: + 1. Служба wuauserv (Центр обновления Windows) + 2. Групповая политика через реестр (WindowsUpdate\AU) + 3. Задания планировщика (Task Scheduler) из ветки WindowsUpdate + + Требует запуска от имени администратора. + +.PARAMETER Disable + Полностью отключает автообновление Windows. + +.PARAMETER Enable + Возвращает автообновление к рабочему состоянию (по умолчанию). + +.PARAMETER Status + Показывает текущее состояние службы, политики и заданий планировщика. + +.PARAMETER Help + Показывает эту справку. + +.EXAMPLE + .\WU-Toggle.ps1 -Disable + Отключает автообновления Windows + +.EXAMPLE + .\WU-Toggle.ps1 -Enable + Включает автообновления обратно + +.EXAMPLE + .\WU-Toggle.ps1 -Status + Проверяет текущий статус автообновления + +.NOTES + Windows 11 Pro 25H2. + После крупного Feature Update (напр. 25H2 -> 26H1) Microsoft иногда + сбрасывает состояние службы/заданий планировщика обратно. + В этом случае просто повторно запустите скрипт с -Disable. + + Запуск скрипта, если он заблокирован политикой выполнения: + powershell -ExecutionPolicy Bypass -File .\WU-Toggle.ps1 -Disable +#> + +#Requires -RunAsAdministrator + +[CmdletBinding()] +param( + [switch]$Disable, + [switch]$Enable, + [switch]$Status, + [switch]$Help +) + +$ErrorActionPreference = 'Stop' + +$RegPolicyPath = "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" +$RegAUPath = "$RegPolicyPath\AU" +$ServiceName = "wuauserv" +$TaskPath = "\Microsoft\Windows\WindowsUpdate\" + +$ScheduledTasks = @( + "Scheduled Start", + "Refresh Group Policy Cache", + "Automatic App Update", + "Report policies", + "Reboot_AC", + "Reboot_Battery", + "sih", + "sihboot", + "sihpostreboot", + "sihpostreboot_ux", + "USO_UxBroker" +) + +function Write-Section($text) { + Write-Host "`n=== $text ===" -ForegroundColor Cyan +} + +function Disable-WindowsUpdate { + Write-Section "Отключение автообновления Windows" + + Write-Host "-> Останавливаю и отключаю службу wuauserv..." + Stop-Service -Name $ServiceName -Force -ErrorAction SilentlyContinue + Set-Service -Name $ServiceName -StartupType Disabled + + Write-Host "-> Применяю политики через реестр..." + if (-not (Test-Path $RegPolicyPath)) { New-Item -Path $RegPolicyPath -Force | Out-Null } + if (-not (Test-Path $RegAUPath)) { New-Item -Path $RegAUPath -Force | Out-Null } + + New-ItemProperty -Path $RegAUPath -Name "NoAutoUpdate" -Value 1 -PropertyType DWord -Force | Out-Null + New-ItemProperty -Path $RegAUPath -Name "AUOptions" -Value 1 -PropertyType DWord -Force | Out-Null + New-ItemProperty -Path $RegPolicyPath -Name "DoNotConnectToWindowsUpdateInternetLocations" -Value 1 -PropertyType DWord -Force | Out-Null + + Write-Host "-> Отключаю задания планировщика Windows Update..." + foreach ($task in $ScheduledTasks) { + try { + Disable-ScheduledTask -TaskName $task -TaskPath $TaskPath -ErrorAction SilentlyContinue | Out-Null + } catch {} + } + + Write-Host "`nГотово. Автообновление отключено." -ForegroundColor Green + Write-Host "Проверить статус: .\WU-Toggle.ps1 -Status" +} + +function Enable-WindowsUpdate { + Write-Section "Включение автообновления Windows" + + Write-Host "-> Убираю политики из реестра..." + Remove-ItemProperty -Path $RegAUPath -Name "NoAutoUpdate" -ErrorAction SilentlyContinue + Remove-ItemProperty -Path $RegAUPath -Name "AUOptions" -ErrorAction SilentlyContinue + Remove-ItemProperty -Path $RegPolicyPath -Name "DoNotConnectToWindowsUpdateInternetLocations" -ErrorAction SilentlyContinue + + Write-Host "-> Включаю задания планировщика..." + foreach ($task in $ScheduledTasks) { + try { + Enable-ScheduledTask -TaskName $task -TaskPath $TaskPath -ErrorAction SilentlyContinue | Out-Null + } catch {} + } + + Write-Host "-> Включаю службу wuauserv..." + Set-Service -Name $ServiceName -StartupType Manual + Start-Service -Name $ServiceName -ErrorAction SilentlyContinue + + Write-Host "`nГотово. Автообновление включено." -ForegroundColor Green +} + +function Get-WUStatus { + Write-Section "Текущий статус автообновления" + + $svc = Get-Service -Name $ServiceName + Write-Host "Служба wuauserv: $($svc.Status) / Автозапуск: $($svc.StartType)" + + $noAuto = (Get-ItemProperty -Path $RegAUPath -Name "NoAutoUpdate" -ErrorAction SilentlyContinue).NoAutoUpdate + $state = if ($noAuto -eq 1) { "ВКЛ (обновления запрещены)" } else { "выкл (обновления разрешены)" } + Write-Host "Политика NoAutoUpdate: $state" + + Write-Host "`nЗадания планировщика:" + foreach ($task in $ScheduledTasks) { + try { + $t = Get-ScheduledTask -TaskName $task -TaskPath $TaskPath -ErrorAction Stop + Write-Host " $task : $($t.State)" + } catch {} + } +} + +# --- Точка входа --- +if ($Help -or (-not $Disable -and -not $Enable -and -not $Status)) { + Get-Help $PSCommandPath -Full + return +} + +if ($Disable) { Disable-WindowsUpdate } +if ($Enable) { Enable-WindowsUpdate } +if ($Status) { Get-WUStatus }