Модуль PSWindowsUpdate: управление обновлениями Windows из PowerShell

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

Установка модуля управления обновлениями PSWindowsUpdate

Если у вас установлена Windows 10, то вы можете установит модуль PSWindowsUpdate из онлайн репозитария через менеджер пакетов PackageManagement всего одной командой:

Install-Module -Name PSWindowsUpdate

Если у вас установлена более старая версия Windows (Windows 7/8.1/ Windows Server 2008 R2/ 2012 R2) или отсутствует прямой доступ в Интернет, вы можете установить модуль PSWindowsUpdate вручную.

Данный модуль можно установить на любые поддерживаемые версии Windows, начиная с Vista / Windows Server 2008 с установленным PowerShell 2.0 (но рекомендуется PoSh 3.0 и выше).

  1. Скачайте последнюю версию модуля PSWindowsUpdate со страницы: https://gallery.technet.microsoft.com/scriptcenter/2d191bcd-3308-4edd-9de2-88dff796b0bc и разблокируйте скачанный файл. установка архива с модулем PSWindowsUpdate
  2. Распакуйте архив с модулем в один из каталогов %USERPROFILE%\Documents\WindowsPowerShell\Modules или %WINDIR%\System32\WindowsPowerShell\v1.0\Modules (при постоянном использовании модуля это лучший вариант).
  3. Разрешите выполнение скриптов: Set-ExecutionPolicy RemoteSigned
  4. Теперь вы можете импортировать модуль в свою сессию PowerShell: Import-Module PSWindowsUpdate Set-ExecutionPolicy RemoteSigned
    Примечание. В Windows 7 / Server 2008 R2 при импорте модуля PSWindowsUpdate вы можете столкнутся с ошибкой вида: Имя «Unblock-File» не распознано как имя командлета. Дело в том, что в модуле используются некоторые функции, которые появились только в PowerShell 3.0. Для использования этих функций вам придется обновить PowerShell, либо вручную удалить строку | Unblock-File из файла PSWindowsUpdate.psm1.

Если вы установили модуль управления обновлениями Windows на своем компьютере, вы можете удаленно установить его и на других компьютерах и/или серверах. Воспользуйтесь таким скриптом, чтобы скопировать модуль на два указанных удаленных сервера:

$Targets = "Server1", "Server2"
Update-WUModule -LocalPSWUSource "C:\Windows\system32\WindowsPowerShell\v1.0\Modules\PSWindowsUpdate" -ComputerName $Targets

Invoke-Command -ComputerName $Targets -ScriptBlock{ Add-Content $Env:WINDIR\system32\WindowsPowerShell\v1.0\profile.ps1 «`nImport-Module PSWindowsUpdate»}

Обзор команд модуля PSWindowsUpdate

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

get-command -module PSWindowsUpdate

Вкратце опишем назначение команд модуля:

  1. Get-WindowsUpdate — алиас для Get-WUList.
  2. Hide-WindowsUpdate – алиас для Hide-WUUpdate.
  3. Install-WindowsUpdate — алиас для Get-WUInstall.
  4. Uninstall-WindowsUpdate — алиас для Get-WUUninstall.
  5. Add-WUOfflineSync – функция позволяет устанавливать обновления из локального кэша, используя файл wsusscan.cab или wsusscn2.cab.
  6. Add-WUServiceManager – регистрация сервера обновления на компьютере.
  7. Get-WUHistory – выводит список установленных обновлений.
  8. Get-WUInstall – основной командлет модуля PSWindowsUpdate. Позволяет скачать и установить обновления с сервера WSUS или Microsoft Update. Позволяет выбрать категории обновлений, конкретные обновления и указать правила перезагрузки компьютера при установке обновлений.
  9. Get-WUInstallerStatus – проверка состояния службы Windows Installer.
  10. Get-WURebootStatus – позволяет проверить, нужна ли перезагрузка для применения конкретного обновления.
  11. Get-WUList – выводит список обновлений, соответствующим указанным критериям, позволяет найти и установить нужное обновление.
  12. Get-WUServiceManager – проверка источников обновлений.
  13. Get-WUUninstall – командлет позволяет удалить конкретное обновление по KB ID.
  14. Hide-WUUpdate — позволяет скрыть определенные обновления от установки.
  15. Invoke-WUInstall – управление удаленной установкой обновлений.
  16. Remove-WUOfflineSync – удаление офлайн источника сканирования.
  17. Remove-WUServiceManager – удаление сервера обновлений.

Команды модуля PSWindowsUpdate для управления обвнелниями Windows

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

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

Get-WUInstall -ListOnly

Get-WUInstall ListOnly- получить список доступных обвнолений Windows

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

Get-WUList –ComputerName server2

Вы можете проверить, откуда должна получать обновления ваша Windows. Выполните команду:

Get-WUServiceManager

ServiceID IsManaged IsDefault Name
--------- --------- --------- ----
8b24b027-1dee-babb-9a95-3517dfb9c552 False False DCat Flighting Prod
855e8a7c-ecb4-4ca3-b045-1dfa50104289 False False Windows Store (DCat Prod)
3da21691-e39d-4da6-8a4b-b43877bcb1b7 True True Windows Server Update Service
9482f4b4-e343-43b6-b170-9a65bc822c77 False False Windows Update

Get-WUServiceManager - источникиа обновлений

Как вы видите, компьютер настроен на получение обновлений с локального WSUS и Windows Update.

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

Get-WUinstall -MicrosoftUpdate –ListOnly

Вы получаете предупреждение:

Can’t find registered service Microsoft Update. Use Get-WUServiceManager to get registered service.

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

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

Теперь можете выполнить сканирование на Microsoft Update.

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

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

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

Get-WUInstall -NotCategory "Drivers" -NotTitle OneDrive -NotKBArticleID KB4011670 -ListOnly

Установка обновления с помощью PSWindowsUpdate

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

Get-WUInstall -AcceptAll –IgnoreReboot

Get-WUInstall - установка обновлений Windows модуль PSWindowsUpdate

Ключ AcceptAll включает одобрение установки для всех пакетов, а IgnoreReboot подавляет автоматическую перезагрузки Windows после установки обновлений.

Можно установить только конкретные пакеты обновлений:

Get-WUInstall -KBArticleID KB4011670,KB4456655 –AcceptAll

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

Get-WUInstall -NotCategory "Drivers" -NotTitle OneDrive -NotKBArticleID KB4011670 -AcceptAll -IgnoreReboot

Для автоматизации установки обновлений с исключениями на нескольких компьютерах можно использовать такой скрипт:

PowerShell -ExecutionPolicy RemoteSigned -Command Import-Module PSWindowsUpdate; Get-WUInstall -NotCategory "Language packs" -NotTitle OneDrive -NotKBArticleID KB4011670 -AcceptAll –IgnoreReboot

Модуль позволяет удаленно запустить установку обновлений сразу на нескольких компьютерах или сервера (на компьютерах должен присутствовать модуль PSWindowsUpdate). Это особенно удобно, так как позволяет администратору не заходить вручную на все сервера во время плановой установки обновлений. Следующая команда установит все доступные обновление на трех удаленных серверах:

Invoke-WUInstall -ComputerName server1, server2, server1-Script {ipmo PSWindowsUpdate; Get-WUInstall -AcceptAll -AutoReboot | Out-File C:\Windows\PSWindowsUpdate.log } -Confirm:$false -Verbose -SkipModuleTest –RunNow

Просмотр истории установленных обновлений

С помощью команды Get-WUHistory вы можете получить список обновлений, установленных на компьютере ранее. Можно получить информацию о дате установки конкретного обновления:

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

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

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

Удаление обновлений

Для удаления обновлений используется командлет Remove-WindowsUpdate. Вам достаточно указать номер KB в качестве аргумента параметра KBArticleID. Чтобы отложить автоматическую перезагрузку компьютера можно добавить ключ –NoRestart:

Remove-WindowsUpdate -KBArticleID KB4011634 -NoRestart

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

Вы можете скрыть определенные обновления, чтобы они никогда не устанавливались службой обновлений Windows Update на вашем компьютер. Например, чтобы скрыть обновления KB4011670 и KB4456655, выполните такие команды:

$HideList = "KB4011670", "KB4456655"
Hide-WindowsUpdate -KBArticleID $HideList –Hide

Hide-WindowsUpdate скрыть обновление Windows

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

Вывести список обновлений, которые скрыты на данном компьютере можно так:

Get-WindowsUpdate -IsHidden

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

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

Для тех, кто себя некомфортно чувствует в консоли, для управления обновлениями Windows 10 могу порекомендовать графическую утилиту Windows Update MiniTool.


Предыдущая статья Следующая статья


Комментариев: 12 Оставить комментарий

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не робот( Обязательно отметьте)