Create WU-Toggle
This commit is contained in:
+157
@@ -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 }
|
||||
Reference in New Issue
Block a user