<# .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 }