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