Вы можете использовать команду PSWindowsUpdate Модуль PowerShell для управления обновлениями Windows из командной строки. Модуль PSWindowsUpdate доступен для загрузки из галереи PowerShell и позволяет администраторам сканировать, загружать, устанавливать, удалять или скрывать обновления Windows на локальных или удаленных рабочих станциях и серверах.

Установка модуля PSWindowsUpdate

Установить модуль PSWindowsUpdate на Windows 10/11 и Windows Server 2022/2019/2016 можно из онлайн-репозитория (PSGallery) с помощью команды:

Install-Module -Name PSWindowsUpdate -Force

Подтвердите добавление репозиториев, нажав Y. Убедитесь, что модуль управления обновлениями установлен в Windows:

Get-Package -Name PSWindowsUpdate

Install-Module PSWindowsUpdate from PSGallery

  • В изолированной среде модуль PSWindowsUpdate можно установить в автономном режиме;
  • Чтобы использовать модуль на старых версиях Windows, необходимо обновить версию PowerShell.

Вы можете удаленно установить модуль PSWindowsUpdate на другие компьютеры в сети. Следующая команда скопирует файлы модуля на указанные компьютеры (для доступа к удаленным компьютерам используется WinRM).

$Targets = "lon-fs02.woshub.loc", "lon-db01.woshub.loc"
Update-WUModule -ComputerName $Targets –Local

Политика выполнения сценариев PowerShell по умолчанию в Windows блокирует запуск команд сторонних разработчиков (включая команду PSWindowsUpdate),

Set-ExecutionPolicy –ExecutionPolicy RemoteSigned -force

Или можно разрешить командам модуля выполняться только в текущем сеансе PowerShell:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process

Импортируйте модуль в сеанс PowerShell:

Import-Module PSWindowsUpdate

Список доступных команд в модуле PSWindowsUpdate

Get-Command -module PSWindowsUpdate

список команд модуля PSWindowsUpdate

Проверка текущих настроек клиента Windows Update:

Get-WUSettings

ComputerName                                 : WKS5S2N39S2
WUServer                                     : http://MN-WSUS:8530
WUStatusServer                               : http://MN-WSUS:8530
AcceptTrustedPublisherCerts                  : 1
ElevateNonAdmins                             : 1
DoNotConnectToWindowsUpdateInternetLocations : 1
TargetGroupEnabled                           : 1
TargetGroup                                  : ServersProd
NoAutoUpdate                                 : 0
AUOptions                                    : 3 - Notify before installation
ScheduledInstallDay                          : 0 - Every Day
ScheduledInstallTime                         : 3
UseWUServer                                  : 1
AutoInstallMinorUpdates                      : 0
AlwaysAutoRebootAtScheduledTime              : 0
DetectionFrequencyEnabled                    : 1
DetectionFrequency                         : 4

Get-WUSettings - список текущих настроек Windows Update на компьютере

В этом примере клиент Windows Update на компьютере настроен с помощью GPO на получение обновлений с локального сервера обновлений WSUS.

Сканирование и загрузка обновлений Windows с помощью PowerShell

Чтобы просканировать компьютер на сервере обновлений и получить необходимые обновления, выполните команду:

Get-WindowsUpdate

Или:

Get-WUList

Команда выводит список обновлений, которые необходимо установить на компьютер.

сканирование компьютера на наличие доступных обновлений windows

При первом запуске команды Get-WindowsUpdate она может выдать ошибку:Значение не попадает в ожидаемый диапазон.

get-windowsupdate error: Значение не попадает в ожидаемый диапазон.

Чтобы устранить ошибку, необходимо сбросить настройки агента Windows Update, перерегистрировать библиотеки и восстановить wususerv службу в состояние по умолчанию с помощью команды:

Reset-WUComponents -Verbose

сброс компонентов обновления windows с помощью powershell Сброс-WUComponents

Чтобы проверить источник Windows Update на вашем компьютере (это серверы Windows Update в Интернете или локальный WSUS), выполните следующую команду:

Get-WUServiceManager

Get-WUServiceManager - получить источники обновлений

В этом примере компьютер настроен на получение обновлений с локального сервера WSUS (Служба обновления Windows Server = True). В этом случае вы увидите список обновлений, которые были одобрены для вашего компьютера.

Чтобы просканировать компьютер по серверам Microsoft Update в Интернете (эти серверы содержат обновления для Office и других продуктов в дополнение к обновлениям Windows), выполните эту команду:

Get-WUlist -MicrosoftUpdate

Вы получите следующее предупреждение:

Get-WUlist : Service Windows Update was not found on computer. Use Get-WUServiceManager to get registered service.

Чтобы разрешить сканирование в Microsoft Update, выполните эту команду:

Add-WUServiceManager -ServiceID "7971f918-a847-4430-9279-4a52d1efe18d" -AddServiceFlag 7

Если вы хотите удалить определенные продукты или KB из списка обновлений, которые получает ваш компьютер, вы можете исключить их, выполнив следующие действия:

  • Категория (-NotCategory);
  • Название (-NotCategory);
  • Номер обновления (-NotKBArticleID).

Например, чтобы исключить из списка обновлений обновления драйверов, OneDrive и определенный KB:

Get-WUlist -NotCategory "Drivers" -NotTitle "OneDrive" -NotKBArticleID KB4489873

Вы можете загрузить все доступные обновления на свой компьютер (файлы обновлений загружаются в локальный кэш обновлений в C:\Windows\SoftwareDistribution\Download).

Get-WindowsUpdate -Download -AcceptAll

Windows загрузит все доступные обновления (файлы MSU и CAB) с сервера обновлений в локальный каталог обновлений, но не будет устанавливать их автоматически.

Локальная загрузка обновлений Windows с помощью PowerShell

Установка обновлений Windows с помощью PowerShell

Чтобы автоматически загрузить и установить все доступные обновления для устройства Windows с серверов Windows Update (вместо локального WSUS), выполните команду:

Install-WindowsUpdate -MicrosoftUpdate -AcceptAll -AutoReboot

[AcceptAll опция принимает установку всех пакетов обновлений, а Автоперезагрузка позволяет Windows автоматически перезагружаться после установки обновлений.

Можно также использовать следующие параметры:

  • IgnoreReboot — отключить автоматическую перезагрузку компьютера;
  • ScheduleReboot — Планирование точного времени перезагрузки компьютера.

Историю установки обновлений можно записывать в файл журнала (его можно использовать вместо файла WindowsUpdate.log).

Install-WindowsUpdate -AcceptAll -Install -AutoReboot | Out-File "c:\logs\$(get-date -f yyyy-MM-dd)-WindowsUpdate.log" -force

Вы можете установить только конкретные обновления по их KB-номерам:

Get-WindowsUpdate -KBArticleID KB2267602, KB4533002 -Install

Get-WindowsUpdate Установка обновлений powershell

Если вы хотите пропустить некоторые обновления во время установки, выполните эту команду:

Install-WindowsUpdate -NotCategory "Drivers" -NotTitle OneDrive -NotKBArticleID KB4011670 -AcceptAll -IgnoreReboot

Проверьте, нужно ли перезагружать компьютер после установки обновления (ожидание перезагрузки):

Get-WURebootStatus | select RebootRequired, RebootScheduled

проверка наличия ожидающей перезагрузки с помощью powershell Get-WURebootStatus

Проверка истории обновлений Windows с помощью PowerShell

The Get-WUHistory Команда используется для получения списка обновлений, которые ранее были автоматически или вручную установлены на компьютере.

Get-WUHistory - проверка истории обновлений windows

Проверяет дату установки определенного обновления на компьютер:

Get-WUHistory| Where-Object {$_.Title -match "KB4517389"} | Select-Object *|ft

Get-WUHistory для конкретного KB

Узнайте, когда ваш компьютер сканировался в последний раз и когда было установлено обновление:

Get-WULastResults |select LastSearchSuccessDate, LastInstallationSuccessDate

Get-WULastResults - последнее сканирование обновлений

Удаление обновлений Windows с помощью PowerShell

Используйте Remove-WindowsUpdate Команда для удаления обновлений Windows на компьютере. Просто укажите номер KB в качестве аргумента параметра KBArticleID:

Remove-WindowsUpdate -KBArticleID KB4489873 -NoRestart

Как скрыть или показать обновления Windows с помощью PowerShell

Вы можете скрыть определенные обновления, чтобы служба Windows Update не смогла их установить (чаще всего нужно скрыть обновления драйверов). Например, чтобы скрыть обновления KB4489873 и KB4489243, выполните следующие команды:

$HideList = "KB4489873", "KB4489243"
Get-WindowsUpdate -KBArticleID $HideList –Hide

Или используйте псевдоним:

Hide-WindowsUpdate -KBArticleID $HideList -Verbose

powershell - скрыть определенные KB в обновлении windows

Скрытые обновления не будут отображаться в списке доступных обновлений при следующем использовании команды Get-WindowsUpdate для проверки наличия обновлений.

Список скрытых обновлений:

Get-WindowsUpdate –IsHidden

Заметьте, что H (Скрытый) появился атрибут «Статус» для скрытых обновлений.

Get-WindowsUpdate -IsHidden - поиск скрытых обновлений

Чтобы снять скрытие обновлений на компьютере:

Get-WindowsUpdate -KBArticleID $HideList -WithHidden -Hide:$false

или:

Show-WindowsUpdate -KBArticleID $HideList

Установка обновлений Windows на удаленные компьютеры с помощью PowerShell

Почти все команды PSWindowsUpdate позволяют управлять обновлениями на удаленных компьютерах. Для установки обновлений на удаленных компьютерах используйте –Computername для этого. WinRM должен быть включен и настроен (вручную или через GPO) на удаленных компьютерах. Модуль PSWindowsUpdate можно использовать для удаленного управления обновлениями Windows как на компьютерах в домене AD, так и в рабочей группе (требуется настройка PowerShell Remoting для среды рабочей группы).

Чтобы управлять обновлениями на удаленных компьютерах, необходимо добавить имена хостов в список доверенных хостов WinRM или настроить PowerShell Remoting (WinRM) через HTTPS.

winrm set winrm/config/client '@{TrustedHosts="server1,server2,…"}'

Или с помощью PowerShell:
Set-Item wsman:\localhost\client\TrustedHosts -Value server1 -Force

Вы можете использовать команду Invoke-Command, чтобы включить модуль PSWindowsUpdate на удаленных компьютерах и открыть необходимые порты в брандмауэре Windows Defender (Enable-WURemoting команда):

$Targets = "lon-fs02", "lon-db01"
Invoke-Command -ComputerName $Target -ScriptBlock {Set-ExecutionPolicy RemoteSigned -force }
Invoke-Command -ComputerName $Target -ScriptBlock {Import-Module PSWindowsUpdate; Enable-WURemoting}

Проверка списка доступных обновлений на удаленном компьютере:

Get-WUList –ComputerName server2

Загрузите и установите все доступные обновления на нескольких удаленных узлах Windows:

$ServerNames = "server1, server2, server3"
Invoke-WUJob -ComputerName $ServerNames -Script {ipmo PSWindowsUpdate; Install-WindowsUpdate -AcceptAll | Out-File C:\Windows\PSWindowsUpdate.log } -RunNow -Confirm:$false -Verbose -ErrorAction Ignore

Команда Invoke-WUJob создает задачу планировщика на удаленном компьютере, которая запускается под локальной учетной записью SYSTEM.

Вы можете задать точное время установки обновлений Windows:

Invoke-WUJob -ComputerName $ServerNames -Script {ipmo PSWindowsUpdate; Install-WindowsUpdate –AcceptAll -AutoReboot | Out-File C:\Windows\PSWindowsUpdate.log } -Confirm:$false -TriggerDate (Get-Date -Hour 22 -Minute 0 -Second 0)

Проверьте состояние задачи установки обновлений:

Get-WUJob -ComputerName $ServerNames

Если команда возвращает пустой список, задача установки обновления завершена на всех компьютерах.

Проверьте несколько удаленных узлов на наличие конкретного обновления:

"server1","server2" | Get-WUHistory| Where-Object {$_.Title -match "KB4011634"} | Select-Object *|ft

Чтобы узнать последнюю дату установки обновления на всех компьютерах домена, используйте команду Get-ADComputer (из модуля Active Directory for PowerShell):

$Computers=Get-ADComputer -Filter {enabled -eq "true" -and OperatingSystem -Like '*Windows*' }
Foreach ($Computer in $Computers)
{
Get-WULastResults -ComputerName $Computer.Name|select ComputerName, LastSearchSuccessDate, LastInstallationSuccessDate
}

PSWindowsUpdate Модуль PowerShell предоставляет удобный способ загрузки и установки обновлений Windows из командной строки. Это полезная опция для установки обновлений на узлах без графического интерфейса: Windows Server Core или Hyper-V Server. Этот модуль также необходим, если вам нужно установить и отслеживать установку обновлений на нескольких серверах/рабочих станциях Windows одновременно.