Вы можете использовать команду 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
- В изолированной среде модуль 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
Проверка текущих настроек клиента 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
В этом примере клиент Windows Update на компьютере настроен с помощью GPO на получение обновлений с локального сервера обновлений WSUS.
Сканирование и загрузка обновлений Windows с помощью PowerShell
Чтобы просканировать компьютер на сервере обновлений и получить необходимые обновления, выполните команду:
Get-WindowsUpdate
Или:
Get-WUList
Команда выводит список обновлений, которые необходимо установить на компьютер.
Чтобы устранить ошибку, необходимо сбросить настройки агента Windows Update, перерегистрировать библиотеки и восстановить wususerv
службу в состояние по умолчанию с помощью команды:
Reset-WUComponents -Verbose
Чтобы проверить источник Windows Update на вашем компьютере (это серверы Windows Update в Интернете или локальный WSUS), выполните следующую команду:
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 с серверов 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
Если вы хотите пропустить некоторые обновления во время установки, выполните эту команду:
Install-WindowsUpdate -NotCategory "Drivers" -NotTitle OneDrive -NotKBArticleID KB4011670 -AcceptAll -IgnoreReboot
Проверьте, нужно ли перезагружать компьютер после установки обновления (ожидание перезагрузки):
Get-WURebootStatus | select RebootRequired, RebootScheduled
Проверка истории обновлений Windows с помощью PowerShell
The Get-WUHistory Команда используется для получения списка обновлений, которые ранее были автоматически или вручную установлены на компьютере.
Проверяет дату установки определенного обновления на компьютер:
Get-WUHistory| Where-Object {$_.Title -match "KB4517389"} | Select-Object *|ft
Узнайте, когда ваш компьютер сканировался в последний раз и когда было установлено обновление:
Get-WULastResults |select LastSearchSuccessDate, LastInstallationSuccessDate
Удаление обновлений 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
Скрытые обновления не будут отображаться в списке доступных обновлений при следующем использовании команды Get-WindowsUpdate для проверки наличия обновлений.
Список скрытых обновлений:
Get-WindowsUpdate –IsHidden
Заметьте, что H
(Скрытый) появился атрибут «Статус» для скрытых обновлений.
Чтобы снять скрытие обновлений на компьютере:
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 одновременно.