Шаг 1. Подготовь скрипт
Создай файл: Force-WSUSCheckIn.ps1
Содержимое такое:
[CmdletBinding()]
param()
$ErrorActionPreference = 'Stop'
$LogDir = 'C:\ProgramData\WSUS'
$LogFile = Join-Path $LogDir 'Force-WSUSCheckIn.log'
if (-not (Test-Path $LogDir)) {
New-Item -Path $LogDir -ItemType Directory -Force | Out-Null
}
function Write-Log {
param(
[string]$Message,
[string]$Level = 'INFO'
)
$line = '{0} [{1}] {2}' -f (Get-Date -Format 'yyyy-MM-dd HH:mm:ss'), $Level, $Message
Add-Content -Path $LogFile -Value $line
Write-Output $line
}
try {
Write-Log '--- Start WSUS trigger ---'
try {
$wua = Get-Service -Name wuauserv -ErrorAction Stop
if ($wua.Status -ne 'Running') {
Write-Log 'Starting service wuauserv'
Start-Service -Name wuauserv -ErrorAction Stop
Start-Sleep -Seconds 3
}
else {
Write-Log 'Service wuauserv already running'
}
}
catch {
Write-Log "Could not verify/start wuauserv: $($_.Exception.Message)" 'WARN'
}
Write-Log 'Creating Microsoft.Update.Session COM object'
$updateSession = New-Object -ComObject Microsoft.Update.Session
Write-Log 'Running update search'
$searchResult = $updateSession.CreateUpdateSearcher().Search("( IsInstalled = 0 and IsHidden = 0 )")
if ($null -ne $searchResult -and $null -ne $searchResult.Updates) {
Write-Log ("Search completed successfully. Updates found: {0}" -f $searchResult.Updates.Count)
}
else {
Write-Log 'Search completed, but result object is empty' 'WARN'
}
Write-Log '--- Finish WSUS trigger OK ---'
exit 0
}
catch {
Write-Log ("ERROR: {0}" -f $_.Exception.Message) 'ERROR'
Write-Log '--- Finish WSUS trigger FAILED ---' 'ERROR'
exit 1
}Шаг 2. Положи скрипт в доступное место
Проще всего — в SYSVOL, чтобы всем серверам домена было удобно читать файл.
Например:
\\domain.local\SYSVOL\domain.local\scripts\WSUS\Force-WSUSCheckIn.ps1
Если папки WSUS нет — создай её.
Важно:
- у компьютеров домена должен быть Read к этому пути
- менять права обычно не нужно, у SYSVOL это обычно уже работает как надо
Шаг 3. Создай группу безопасности для проблемных серверов
В ADUC: dsa.msc
Дальше:
- открой контейнер, где хранишь группы, например
Groups - Rechtsklick → Neu → Gruppe
- Имя:
GG_WSUS_ProblemServers - Typ: Sicherheit
- Bereich: Global
- OK
Потом добавь в неё 20 серверов:
- открыть свойства группы
- вкладка Mitglieder
- Hinzufügen
- добавить компьютерные объекты серверов
Это безопасный способ ограничить применение GPO без изменения OU-структуры. Security filtering позволяет применять GPO только к членам заданной группы.
Шаг 4. Создай новый GPO
Открой: gpmc.msc
Дальше:
- раскрой:
- Forest: rrlnz.local
- Domains
- rrlnz.local
Теперь есть два варианта, куда линковать GPO:
Вариант A — самый простой
Линкуй на сам домен:
- Rechtsklick на
domain.local - Create a GPO in this domain, and Link it here…
Имя, например:
GPO_WSUS_ForceCheckIn_ProblemServers
Это сработает, если серверы разбросаны по разным OU, а ты хочешь одну точку управления. Применение потом ограничим security filtering. GPO scope определяется ссылкой на site/domain/OU, а фактическое применение можно дополнительно ограничить фильтрацией и таргетингом.
Вариант B — если есть общий верхний OU
Можно линковать выше по дереву, но не обязательно.
Шаг 5. Настрой Security Filtering
Выдели созданный GPO в GPMC.
На вкладке Scope:
В блоке Security Filtering
- удали
Authenticated Users - добавь группу
GG_WSUS_ProblemServers
После этого GPO будет применяться только к серверам из этой группы, даже если линк стоит на уровне домена. Это как раз стандартный сценарий security filtering для GPO.
Важно
Проверь на вкладке Delegation → Advanced, чтобы у группы GG_WSUS_ProblemServers были права:
- Read
- Apply group policy
Обычно при правильном добавлении через Security Filtering это выставляется как нужно.
Шаг 6. Отредактируй GPO
Rechtsklick на GPO → Bearbeiten Откроется Gruppenrichtlinienverwaltungs-Editor.
Шаг 7. Добавь копирование файла через Preferences → Files
Иди сюда: Computerkonfiguration -> Einstellungen -> Windows-Einstellungen -> Dateien
Если у тебя английская оснастка, это будет:
Computer Configuration -> Preferences -> Windows Settings -> Files
Теперь:
- Rechtsklick → Neu → Datei
Заполни:
Allgemein
- Aktion:
Aktualisieren - Quelldatei:
\\rrlnz.local\SYSVOL\rrlnz.local\scripts\WSUS\Force-WSUSCheckIn.ps1 - Zieldatei:
C:\ProgramData\WSUS\Force-WSUSCheckIn.ps1
Почему Aktualisieren, а не Ersetzen:
Updateобычно достаточно и мягче в сопровождении- файл будет обновляться при изменении GPO preference item Preferences node и Files item используются именно для таких дополнительных настроек и развёртывания файлов.
Шаг 8. Добавь Scheduled Task через Preferences
Иди сюда: Computerkonfiguration -> Einstellungen -> Systemsteuerungseinstellungen -> Geplante Tasks
В английском: Computer Configuration -> Preferences -> Control Panel Settings -> Scheduled Tasks
Теперь:
- Rechtsklick → Neu
- выбери Geplanter Task (mindestens Windows 7)
или аналогичный вариант для новой ОС
Вкладка Allgemein
Заполни так:
- Aktion:
Erstellen - Name:
Force-WSUS-CheckIn - Beschreibung:
Runs Microsoft.Update.Session search to force WSUS check-in on problematic servers - Ausführen als / Sicherheitsoptionen:
NT AUTHORITY\SYSTEM - включить:
- Unabhängig von der Benutzeranmeldung ausführen
- Mit höchsten Privilegien ausführen Запуск от SYSTEM для компьютерной задачи здесь правильнее, чем от доменного администратора.
Вкладка Trigger
Добавь два триггера.
Trigger 1
- Neu
- Aufgabe starten:
Beim Start - Verzögern für:
20 Minuten
Trigger 2
- Neu
- Aufgabe starten:
Nach Zeitplan - Einstellung:
Täglich - Start:
03:15:00 - если доступно поле задержки:
- Verzögern für:
1 Stunde
- Verzögern für:
- включить Aktiviert
Здесь идея простая: один запуск после старта сервера и один плановый запуск в сутки. Это не конфликтует с обычной обработкой Group Policy и не создаёт слишком агрессивный шум. Компьютерные GPO применяются при старте и затем обновляются периодически в фоне.
Вкладка Aktionen
Добавь одно действие:
- Programm/Skript:
powershell.exe - Argumente hinzufügen: -NoProfile -ExecutionPolicy Bypass -File “C:\ProgramData\WSUS\Force-WSUSCheckIn.ps1”
- Starten in: C:\ProgramData\WSUS
Вкладка Bedingungen
Я бы сняла слишком жёсткие ограничения:
- убрать зависимость от Netzstrom, если это серверы в VM и поле вообще есть
- не завязывать на Idle
Вкладка Einstellungen
Поставь:
- Aufgabe kann bei Bedarf ausgeführt werden
- Aufgabe so schnell wie möglich nach einem verpassten Start ausführen
- Wenn die Aufgabe bereits ausgeführt wird →
Keine neue Instanz startenGroup Policy Preferences поддерживают Scheduled Tasks и item-level targeting для preference items, если нужно ещё сильнее сузить применение отдельных элементов.
Шаг 9. Нужно ли ещё делать Item-level targeting
Не обязательно, если ты уже используешь Security Filtering через группу GG_WSUS_ProblemServers.
Но если хочешь “двойную страховку”, можно у обоих preference items — и у File, и у Scheduled Task — включить таргетинг.
Как включить
Открой item → вкладка Gemeinsam / Common
- поставить галочку Elementbezogene Zielgruppenadressierung
- нажать Zielgruppenadressierung…
Там можно добавить:
- Security Group
- и указать
GG_WSUS_ProblemServers
Или даже конкретные имена компьютеров. Microsoft прямо указывает, что item-level targeting позволяет делать так, чтобы отдельные preference items применялись только к выбранным компьютерам внутри одного GPO.
Мой совет
Сделай так:
- Security Filtering на уровне GPO
- и без item-level targeting на первом проходе
Это проще.
Если потом увидишь, что нужно ещё уже — добавишь targeting.
Шаг 10. Форсируй применение на одном тестовом сервере
На одном проблемном сервере выполни:
gpupdate /force
Потом перезагрузи сервер или хотя бы проверь, появилась ли задача.
Почему перезагрузка полезна: компьютерные настройки GPO применяются при старте машины, а Scheduled Task как computer preference часто удобнее валидировать после normal startup cycle.
Шаг 11. Проверь, что GPO реально пришла
Вариант 1 — gpresult
На сервере:
gpresult /h C:\Temp\gpresult.html
Открой файл C:\Temp\gpresult.html и проверь:
- Applied GPOs
- есть ли там
GPO_WSUS_ForceCheckIn_ProblemServers
Microsoft документирует gpresult как стандартный способ увидеть результирующие политики.
Вариант 2 — Group Policy Results Wizard
В GPMC:
- Group Policy Results
- Group Policy Results Wizard
- выбери нужный сервер
Это тоже официальный способ посмотреть реально применившиеся GPO.
Вариант 3 — логи
Если GPO не пришла, смотри:
- Event Viewer
Applications and Services Logs -> Microsoft -> Windows -> GroupPolicy -> Operational
Microsoft рекомендует этот журнал для troubleshooting применения GPO. Если проблема именно с Preferences, их события пишутся в Application log, а дополнительная детализация может включаться через Group Policy logging/tracing.
Шаг 12. Проверь задачу и лог скрипта
На сервере:
Get-ScheduledTask -TaskName “Force-WSUS-CheckIn”
Get-ScheduledTaskInfo -TaskName “Force-WSUS-CheckIn”
Потом посмотри лог:
Get-Content C:\ProgramData\WSUS\Force-WSUSCheckIn.log -Tail 50
Если хочешь сразу запустить вручную:
Start-ScheduledTask -TaskName “Force-WSUS-CheckIn”
Шаг 13. После проверки — распространяй на все 20
Когда один сервер отработал:
- убедись, что файл копируется
- задача создаётся
- лог пишется
- WSUS обновляется
Потом просто дождись обновления Group Policy на остальных серверах или сделай выборочный gpupdate /force.