Резюме: Microsoft Scripting Guy, Ed Wilson рассказывает о бесплатном модуле Windows PowerShell для запуска Windows Update.
Microsoft Scripting Guy, Ed Wilson на связи. Несколько разочаровывающим является тот факт, что Windows 8 и Windows Server 2012 не включают в себя командлеты для работы с Windows Update из PowerShell. Пару лет назад я написал несколько скриптов и функций, использующих Windows Update API, но я не хочу возиться с набором скриптов. К счастью, этого и не требуется. Michal Gajda написал Windows Update PowerShell Module, доступный из Scripting Guys Script Repository. Все что нужно сделать – это скачать его, разблокировать и скопировать в централизованное хранилище
Скачиваем и разблокируем модуль
Windows Update PowerShell Module состоит из нескольких скриптов. После его скачивания, файл PSWindowsUpdate.zip заблокирован. Сейчас существуют командлеты Windows PowerShell для разблокировка файлов, но проще использовать графический интерфейс Windows Explorer.
Теперь, когда я разблокировал архив, я разархивирую его содержимое и скопирую в общую папку на сервере.
Copy-Item -destination \\dc1\Share\PSWindowsUpdate -Recurse -Path C:\fso\PSWindowsUpdate -Force
Импортируем модуль
Теперь мне нудно импортировать модуль. Но эта команда хоть и задана правильно, сложно назвать ее интуитивно-понятной. Вместо указания имени модуля, я указал полный путь к ней. Я запустил консоль PowerShell с правами администратора, потому что команде требуются права для обновления компьютера. Так как модули идентифицируются по имени папки, которое соответствует имени модуля, я просто указал путь к общей папке, содержащей модуль. Весьма радует тот факт, что я могу нажать Tab и мне не придется набирать путь полностью.
ipmo \\dc1\Share\PSWindowsUpdate
Я импортировал модуль, и теперь могу воспользоваться командлетом Get-Command, чтобы посмотреть список доступных мне команд.
PS C:\> gcm -Module pswindows*
CommandType Name ModuleName
———— —- ———-
Function Add-WUOfflineSync PSWindowsUpdate
Function Get-WUHistory PSWindowsUpdate
Function Get-WUInstall PSWindowsUpdate
Function Get-WUInstallerStatus PSWindowsUpdate
Function Get-WUList PSWindowsUpdate
Function Get-WURebootStatus PSWindowsUpdate
Function Get-WUServiceManager PSWindowsUpdate
Function Get-WUUninstall PSWindowsUpdate
Function Remove-WUOfflineSync PSWindowsUpdate
Function Test-ElevatedShell PSWindowsUpdate
Команда (на самом деле расширенная функция) которая мне нужна, называется Get-WUInstall. Эта функция обладает достаточно серьезной функциональностью и, кроме того, содержит встроенную справку. Я рекомендую потратить некоторое время для ознакомления с ее параметрами. По умолчанию, она подключается к Windows Update, выводит список доступных обновлений и предоставляет возможность выбрать необходимые. (Кроме того, она содержит параметр acceptall, при указании которого устанавливаются все обновления). Я запустил эту функцию на своем компьютере и обнаружил видеодрайвер, о котором я раньше не знал.
PS C:\> Get-WUInstall
Confirm
Are you sure you want to perform this action?
Performing operation «nVidia — Graphics Adapter WDDM1.1, Graphics Adapter WDDM1.2,
Other hardware — NVIDIA Quadro 2000M[226 MB]?» on Target «EDLT».
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help
(default is «Y»):y
X Status KB Size Title
— —— — —- ——
2 Accepted 226 MB nVidia — Graphics Adapter WDDM1.1, Graphics Adapter…
3 Downloaded 226 MB nVidia — Graphics Adapter WDDM1.1, Graphics Adapter…
4 Installed 226 MB nVidia — Graphics Adapter WDDM1.1, Graphics Adapter…
Для определения того, нужно ли мне перезагрузить компьютер после установки обновлений, я могу воспользоваться командлетом Get-WURebootStatus.
PS C:\> Get-WURebootStatus
Reboot is not Required.
Если я хочу перезагрузить компьютер с Windows 8 или Windows Server 2012, я могу ввести команду Restart-Computer. Но даже на Windows 7 (или Windows XP) с установленными Windows PowerShell 2.0 и функцией Get-WUInstall, я могу перезапустить компьютер, используя встроенные параметры команды. Например, я могу указать такие опции, как AutoReboot и IgnoreReboot.
Сейчас я конфигурирую мои удаленные серверы и обновляю их через Windows Update. Я думаю, что для большей надежности тут потребуется еще кое-что дописать, но все таки это здорово, что даже если Windows PowerShell не содержит какого-то функционала по умолчанию, кто-то из сообщества всегда сможет исправить этот недостаток. Спасибо Michal Majda за этот замечательный модуль.
Автор:
Ed Wilson, Microsoft Scripting Guy
Оригинал:
Страницы в социальных сетях:
Twitter: https://twitter.com/vsseth
Facebook: https://fb.com/inpowershell
VKontakte: https://vk.com/inpowershell