Вы можете использовать PowerShell модуль PSWindowsUpdate для управления обновлениями Windows из командной строки. Модуль PSWindowsUpdate не встроен в Windows и доступен для установки из репозитория PowerShell Gallery. PSWindowsUpdate позволяет администраторам удаленно проверять, устанавливать, удалять и скрывать обновления на рабочих станциях и серверах Windows. Модуль PSWindowsUpdate особо ценен при использовании для управления обновлениями в Core редакциях Windows Server (в которых отсутствуют графический интерфейс), а также при настройке образа Windows в режиме аудита.
- Установка модуля управления обновлениями PSWindowsUpdate
- Обзор команд модуля PSWindowsUpdate
- Управление обновлениями Windows на удаленных компьютерах через PowerShell
- Получить список доступных обновлений Windows из PowerShell
- Установка обновлений Windows с помощью Install-WindowsUpdate
- Просмотр истории установленных обновлений Windows (Get-WUHistory)
- Удаление обновлений в Windows с помощью Remove-WindowsUpdate
- Как скрыть ненужные обновления Windows с помощью PowerShell (Hide-WindowsUpdate)?
Установка модуля управления обновлениями PSWindowsUpdate
Если вы используете Windows 10/11 или Windows Server 2022/2019/2016, вы можете установить (обновить) модуль PSWindowsUpdate из онлайн репозитория через менеджер пакетов PackageManagement всего одной командой:
Install-Module -Name PSWindowsUpdate
После окончания установки нужно проверить наличие пакета:
Get-Package -Name PSWindowsUpdate
Install-Module: Unable to download from URI.Unable to download the list of available providers. Check your internet connection.
Для установки модуля нужно использовать для подключения протокол TLS 1.2. Включите его:
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Если у вас установлена более старая версия Windows (Windows 7/8.1/ Windows Server 2008 R2/ 2012 R2) или отсутствует прямой доступ в Интернет, вы можете установить модуль PSWindowsUpdate вручную (см. полную инструкцию по офлайн установке модулей PowerShell).
- Скачайте модуль PSWindowsUpdate на любой онлайн компьютер:
Save-Module –Name PSWindowsUpdate –Path C:\ps\
; - Скопируйте модуль на целевой компьютер, и поместите его в каталог
%WINDIR%\System32\WindowsPowerShell\v1.0\Modules
(при постоянном использовании модуля это лучший вариант); - Разрешите выполнение PowerShell скриптов:
Set-ExecutionPolicy –ExecutionPolicy RemoteSigned -force
- Теперь вы можете импортировать модуль в свою сессию PowerShell:
Import-Module PSWindowsUpdate
Имя "Unblock-File" не распознано как имя командлета
. Дело в том, что в модуле используются некоторые функции, которые появились только в PowerShell 3.0. Для использования этих функций вам придется обновить PowerShell, либо вручную удалить строку | Unblock-File из файла PSWindowsUpdate.psm1.После установки модуля PSWindowsUpdate на своем компьютере вы можете удаленно установить его на другие компьютеры или сервера с помощью командлета Update-WUModule. Например, чтобы скопировать PSWindowsUpdate модуль с вашего компьютера на два удаленных сервера, выполните команды (нужен доступ к удаленным серверам по протоколу WinRM):
$Targets = "Server1", "Server2"
Update-WUModule -ComputerName $Targets -local
Чтобы сохранить модуль в сетевой каталог для дальнейшего импорта модуля на других компьютерах, выполните:
Save-Module -Name PSWindowsUpdate –Path \\fs01\ps\
Обзор команд модуля PSWindowsUpdate
Список доступных командлетов модуля можно вывести так:
get-command -module PSWindowsUpdate
Вкратце опишем назначение команд модуля:
- Clear-WUJob – использовать Get-WUJob для вызова задания WUJob в планировщике;
- Download-WindowsUpdate (алиас для Get-WindowsUpdate –Download) — получить список обновлений и скачать их;
- Get-WUInstall, Install-WindowsUpdate (алиас для Get-WindowsUpdate –Install) – установить обвновления;
- Hide-WindowsUpdate (алиас для Get-WindowsUpdate -Hide:$false) – скрыть обновление;
- Uninstall-WindowsUpdate -удалить обновление с помощью Remove-WindowsUpdate;
- Add-WUServiceManager – регистрация сервера обновления (Windows Update Service Manager) на компьютере;
- Enable-WURemoting — включить правила Windows Defender файервола, разрешающие удаленное использование командлета PSWindowsUpdate;
- Get-WindowsUpdate (Get-WUList) — выводит список обновлений, соответствующим указанным критериям, позволяет найти и установить нужное обновление. Это основной командлет модуля PSWindowsUpdate. Позволяет скачать и установить обновления с сервера WSUS или Microsoft Update. Позволяет выбрать категории обновлений, конкретные обновления и указать правила перезагрузки компьютера при установке обновлений;
- Get-WUApiVersion – получить версию агента Windows Update Agent на компьютере;
- Get-WUHistory – вывести список установленных обновлений (история обновлений);
- Get-WUInstallerStatus — проверка состояния службы Windows Installer;
- Get-WUJob – запуска заданий обновления WUJob в Task Scheduler;
- Get-WULastResults — даты последнего поиска и установки обновлений (LastSearchSuccessDate и LastInstallationSuccessDate);
- Get-WURebootStatus — позволяет проверить, нужна ли перезагрузка для применения конкретного обновления;
- Get-WUServiceManager – вывод источников обновлений;
- Get-WUSettings – получить настройки клиента Windows Update;
- Invoke-WUJob – удаленное вызов заданий WUJobs в Task Schduler для немедленного выполнения заданий PSWindowsUpdate.
- Remove-WindowsUpdate – удалить обновление;
- Remove-WUServiceManager – отключить Windows Update Service Manager;
- Set-PSWUSettings – сохранить настройки модуля PSWindowsUpdate в XML файл;
- Set-WUSettings – настройка параметров клиента Windows Update;
- Update-WUModule – обновить модуль PSWindowsUpdate (можно обновить модуль на удаленном компьютере, скопировав его с текущего, или обновить из PSGallery);
- Reset-WUComponents – позволяет сбросить настройка агента Windows Update на компьютере к настройкам по-умолчанию.
Чтобы проверить текущие настройки клиента Windows Update, выполните команду:
Get-WUSettings
ComputerName : WKS22122 WUServer : http://MS-WSUS:8530 WUStatusServer : http://MS-WSUS:8530 AcceptTrustedPublisherCerts : 1 ElevateNonAdmins : 1 DoNotConnectToWindowsUpdateInternetLocations : 1 TargetGroupEnabled : 1 TargetGroup : WorkstationsProd 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.
Команда
Reset-WUComponents –Verbose
позволяет сбросить все настройки агента Windows Update, перерегистрировать библиотеки и восстановить исходное состояние службы wususerv.
Управление обновлениями Windows на удаленных компьютерах через PowerShell
Практически все командлеты модуля PSWindowsUpdate позволяют управлять установкой обновлений на удаленных компьютерах. Для этого используется атрибут
-Computername Host1, Host2, Host3
. На удаленных компьютерах должен быть включен и настроен WinRM (вручную или через GPO).
Установите модуль PSWindowsUpdate на удаленных компьютерах и разрешите в файерволе доступ по динамическим RPC портам к процессу dllhost.exe. Можно использовать Invoke-Command для настройки модуля PSWindowsUpdate на удаленных компьютерах:
Invoke-Command -ComputerName $computer -ScriptBlock {Set-ExecutionPolicy RemoteSigned -force }
Invoke-Command -ComputerName $computer -ScriptBlock {Import-Module PSWindowsUpdate; Enable-WURemoting}
Модуль PSWindowsUpdate можно использовать для удаленного управлений обновлениями Windows как на компьютерах в домене AD, так и в рабочей группе (потребует определенной настройки PowerShell Remoting)
Для удаленного управления обновлениями компьютерах, нужно добавить имена компьютеров доверенных хостов winrm, или настроить удаленное управление PSRemoting через WinRM HTTPS:
winrm set winrm/config/client ‘@{TrustedHosts="HOST1,HOST2,…"}’
Или с помощью PowerShell:
Set-Item wsman:\localhost\client\TrustedHosts -Value wsk-w10BO1 -Force
Получить список доступных обновлений Windows из PowerShell
Вывести список обновлений, доступных для данного компьютера на сервере обновлений можно с помощью команд Get-WindowsUpdate или Get-WUList.
Чтобы проверить список доступных обновлений на удаленном компьютере, выполните:
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
Как вы видите, компьютер настроен на получение обновлений с локального сервера WSUS (Windows Server Update Service = True). В этом случае вы должны увидеть список обновлений, одобренных для вашего компьютера на WSUS.
Если вы хотите просканировать ваш компьютер на серверах Microsoft Update (кроме обновлений Windows на этих серверах содержатся обновления Office и других продуктов) в Интернете, выполните команду:
Get-WUlist -MicrosoftUpdate
Вы получаете предупреждение:
Get-WUlist : Service Windows Update was not found on computer
Чтобы разрешить сканирование на Microsoft Update, выполните команду:
Add-WUServiceManager -ServiceID "7971f918-a847-4430-9279-4a52d1efe18d" -AddServiceFlag 7
Теперь можете выполнить сканирование на Microsoft Update. Как вы видите, в данном случае были найдены дополнительные обновления для Microsoft Visual C++ 2008 и Microsoft Silverlight.
Чтобы проверить версию агента Windows Update на компьютере, выполните команду:
Get-WUApiVersion
ComputerName PSWindowsUpdate PSWUModuleDll ApiVersion WuapiDllVersion ------------ --------------- ------------- ---------- --------------- FS01 2.2.0.2 2.2.0.2 8.0 10.0.19041.1320
Чтобы убрать определенные продукты или конкретные KB из списка обновлений, которые получает ваш компьютер, вы их можете исключить по:
- Категории (-NotCategory);
- Названию (-NotTitle);
- Номеру обновления (-NotKBArticleID).
Например, исключим из списка обновления драйверов, OneDrive и одну конкретную KB:
Get-WUlist -NotCategory "Drivers" -NotTitle OneDrive -NotKBArticleID KB4533002
Установка обновлений Windows с помощью Install-WindowsUpdate
Чтобы автоматически загрузить и установить все доступные обновления для вашей версии Windows с серверов Windows Update (вместо локального WSUS), выполните:
Install-WindowsUpdate -MicrosoftUpdate -AcceptAll -AutoReboot
Ключ AcceptAll включает одобрение установки для всех пакетов, а AutoReboot разрешает автоматическую перезагрузку Windows после установки обновлений.
Также можно использовать следующе параметры:
- IgnoreReboot – запретить автоматическую перезагрузку;
- ScheduleReboot – задать точное время перезагрузки компьютера.
Можете сохранить историю установки обновлений в лог файл (можно использовать вместо WindowsUpdate.log).
Install-WindowsUpdate -AcceptAll -Install -AutoReboot | Out-File "c:\$(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
Модуль позволяет удаленно запустить установку обновлений сразу на нескольких компьютерах или серверах (на компьютерах должен присутствовать модуль PSWindowsUpdate). Это особенно удобно, так как позволяет администратору не заходить вручную на все сервера во время плановой установки обновлений. Следующая команда установит все доступные обновление на трех удаленных серверах:
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 (ранее командлет назывался Invoke-WUInstall) создаст на удаленном компьютере задание планировщика, запускаемое от 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 20 -Minute 0 -Second 0)
Можно установить обновления на удаленном компьютере и отправить email отчет администратору:
Install-WindowsUpdate -ComputerName server1 -MicrosoftUpdate -AcceptAll - IgnoreReboot -SendReport –PSWUSettings @{SmtpServer="smtp.winitpro.ru";From="[email protected]";To="[email protected]";Port=25} -Verbose
Проверить статус задания установки обновления можно с помощью Get-WUJob:
Get-WUJob -ComputerName $ServerNames
Если команда вернет пустой список, значит задача установки на всех компьютерах выполнена.
Просмотр истории установленных обновлений Windows (Get-WUHistory)
С помощью команды Get-WUHistory вы можете получить список обновлений, установленных на компьютере ранее автоматически или вручную.
Можно получить информацию о дате установки конкретного обновления:
Get-WUHistory| Where-Object {$_.Title -match "KB4517389"} | Select-Object *|ft
Чтобы получить информацию об наличии установленного обновления на нескольких удаленных компьютерах, можно воспользоваться таким кодом:
"server1","server2" | Get-WUHistory| Where-Object {$_.Title -match "KB4011634"} | Select-Object *|ft
Проверить, нужна ли перезагрузка компьютеру после установки обновления:
Get-WURebootStatus –ComputerName WKS80JT
Проверьте значение атрибутов
RebootRequired
и
RebootScheduled
.
Получить дату последней установки обновлений на всех компьютерах в домене можно с помощью командлета Get-ADComputer из модуля AD 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
}
По аналогии можно найти компьютеры, которые не устаналивали обновления более 40 дней и вывести результат в графическую таблицу Out-GridView:
$result=@()
Foreach ($Computer in $Computers) {
$result+= Get-WULastResults -ComputerName $Computer.Name
}
$result| Where-Object { $_.LastInstallationSuccessDate -lt ((Get-Date).AddDays(-30)) }| Out-GridView
Удаление обновлений в Windows с помощью Remove-WindowsUpdate
Для корректного удаления обновлений используется командлет Remove-WindowsUpdate. Вам достаточно указать номер KB в качестве аргумента параметра KBArticleID. Чтобы отложить автоматическую перезагрузку компьютера можно добавить ключ
–NoRestart
:
Remove-WindowsUpdate -KBArticleID KB4011634 -NoRestart
Как скрыть ненужные обновления Windows с помощью PowerShell (Hide-WindowsUpdate)?
Вы можете скрыть определенные обновления, чтобы они никогда не устанавливались службой обновлений Windows Update на вашем компьютер (чаще всего скрывают обновления драйверов). Например, чтобы скрыть обновления KB2538243 и KB4524570, выполните такие команды:
$HideList = "KB2538243", "KB4524570"
Get-WindowsUpdate -KBArticleID $HideList -Hide
или используйте alias:
Hide-WindowsUpdate -KBArticleID $HideList -Verbose
Теперь при следующем сканировании обновлений с помощью команды
Get-WUlist
скрытые обновления не будут отображаться в списке доступных для установки патчей.
Вывести список обновлений, которые скрыты на данном компьютере можно так:
Get-WindowsUpdate –IsHidden
Обратите внимание, что в колонке Status у скрытых обновлений появился атрибут H (Hidden).
Отменить скрытие некоторых обновлений можно так:
Get-WindowsUpdate -KBArticleID $HideList -WithHidden -Hide:$false
или так:
Show-WindowsUpdate -KBArticleID $HideList
Для тех, кто себя некомфортно чувствует в консоли PowerShell, для управления обновлениями Windows 10 могу порекомендовать графическую утилиту Windows Update MiniTool.
В чём смысл ковыряния в командной строке с обновлениями, когда есть удобный интерфейс mmc? Сомневаюсь, что админ на свою машину не поставил набор инструментов для администрирования ActiveDirectory.
Админу как раз удобнее выполнять все действия по обновлению через командную строку. В какой это консоли MMC вы сможете так гибко управлять установкой обнволений на клиентах?
А возможность удаленной установки обновлений сразу на многих серверах просто чудесный инструмент. Я уже второй год пользуюсь этим модулем, очень удобно.
Не понял при чем тут «набор инструментов для администрирования ActiveDirectory»?
Леонид наверное имел введу RSAT
1) Установить модуль на всех серверах можно через GPO(копирование файлов).
2) С помощью этого модуля можно реализвать установку только обновлений безопасности, без перезагрузки. Перезагрузку делать контролируемо.
С помощью WSUS и станартными натсройками GPO єтог не возможно было добиться.
«Invoke-WUInstall -ComputerName server1, server2, server1-Script {ipmo PSWindowsUpdate; Get-WUInstall -AcceptAll -AutoReboot | Out-File C:\Windows\PSWindowsUpdate.log } -Confirm:$false -Verbose -SkipModuleTest –RunNow»
Для этого еще нужно WinRm активировать и рарешить управление с определеных машин.
Верно?
Да, коннект через WinRm
Пытаюсь запустить обновление сразу на всех серверах
Import-Module ActiveDirectory
$TargetComps = Get-ADComputer -SearchBase «OU=Servers,OU=COMPANY,OU=Corporation,DC=company,DC=com» -Filter * | FT dNSHostName
Foreach ($comp in $TargetComps) {Invoke-WUInstall -ComputerName $comp -Script {ipmo PSWindowsUpdate; Get-WUInstall -Type ‘Security Updates’ -IgnoreReboot -SkipModuleTest –RunNow |
Out-File C:\Install\PSWindowsUpdate.log } -Confirm:$false }
Не понимает в таком формате…
Пробую передать список серверов в виде строки
Import-Module ActiveDirectory
$TargetComps = Get-ADComputer -SearchBase «OU=Servers,OU=COMPANY,OU=Corporation,DC=company,DC=com» -Filter * | FT dNSHostName
$comps = [string]::Join(‘, ‘,$TargetComps)
Invoke-WUInstall -ComputerName $comps -Script {ipmo PSWindowsUpdate; Get-WUInstall -Type ‘Security Updates’ -IgnoreReboot -SkipModuleTest –RunNow |
Out-File C:\Install\PSWindowsUpdate.log } -Confirm:$false
Получаю лабуду в виде
ПРЕДУПРЕЖДЕНИЕ: Machine Microsoft.PowerShell.Commands.Internal.Format.FormatStartData, Microsoft.PowerShell.Commands.Internal.Format.GroupStartData, Microsoft.PowerShell.Commands.
Internal.Format.FormatEntryData, Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData,
Как корректно передать список компьютеров из OU єтому модулю?
В первой команде уберите данную часть | ft dNSHostName.
А во второй команде в цикле сделайте так: -ComputerName $comp.name
Спасибо, но не помогло…
Import-Module ActiveDirectory
$TargetComps = Get-ADComputer -SearchBase "OU=СOMP" -Filter * # | FT dNSHostName
$comps = [string]::Join(‘, ‘,$TargetComps)
Invoke-WUInstall -ComputerName $comps.name -Script {ipmo PSWindowsUpdate; Get-WUInstall -Type 'Security Updates' -IgnoreReboot -SkipModuleTest –RunNow |
Out-File C:\Install\PSWindowsUpdate.log } -Confirm:$false
При таком варианте ничего не выполняется, впрочем как и с FT dNSHostName
Во-первых надо вот так:
Import-Module ActiveDirectory
$TargetComps = Get-ADComputer -SearchBase «OU=Servers,OU=COMPANY,OU=Corporation,DC=company,DC=com» -Filter *
Foreach ($comp in $TargetComps) {Invoke-WUInstall -ComputerName $comp.name -Script {ipmo PSWindowsUpdate; Get-WUInstall -Type ‘Security Updates’ -IgnoreReboot -SkipModuleTest –RunNow |
Out-File C:\Install\PSWindowsUpdate.log } -Confirm:$false }
Во-вторых попробуйте без цикла на одном сервере выполнить. Ошибка такая же будет
Вот более правильный вариант
Import-Module ActiveDirectory
$TargetComps = Get-ADComputer -SearchBase "OU=COMP" -Filter * # | FT dNSHostName
$comps = [string]::Join(‘, ‘,$TargetComps.name)
Invoke-WUInstall -ComputerName $comps -Script {ipmo PSWindowsUpdate; Get-WUInstall -Type 'Security Updates' -IgnoreReboot -SkipModuleTest –RunNow |
Out-File C:\Install\PSWindowsUpdate.log } -Confirm:$false
Но
ПРЕДУПРЕЖДЕНИЕ: Machine ***************
is not responding.
Т.е. нужно все-таки еще и все сервера в кавычки взять…
Кто знает как обработать аким образом строку?
В кавычки взял таким способом
$Servers ='»‘+[string]::Join(‘», «‘,$TargetServers.dNSHostName)+'»‘
А как из Wsus извлечь обновление (например, по номеру kb), чтобы получить исполняемый файл для тех мест, где нет Wsus, например exe-файл.
Модуль PSWindowsUpdate вам в этом не поможет. Обновления на WSUS хранятся в виде cab файлов, как сделать из них exe — не представляю. Раньше был у меня какой-то VBS скрипт, но он работал только с какой-то дремучей версией WSUS — позволяел получать exe файлы обновлений для Windows XP / Server 2003.
Сейчас наверно проще скачать нужный MSU файл обновления из каталога Microsoft Update.
А cab файл извлечь с помощью этого powershell можно (зная номер kb)?
cab-файл годится, прочитал здесь, что его тоже можно установить:
https://winitpro.ru/index.php/2018/01/17/offline-ustanovka-cab-i-msu-fajlov-obnovlenij-windows/
Интернет на целевом компьютере, в принципе, недоступен.
Есть еще такая штука, как WSUS Offline Update (_download.wsusoffline.net). Выкачиваете обнволения на компьютере с доступом в интернет, копируете на флешку и несите обновляете ваш изолированный ПК.
Еще в теории вы можете натравить ваш компьютер на каталог с файлами на WSUS сервере (wsuscontent) и запустить перебор всех папок с поиском подходящих cab файлов по схеме из статьи https://winitpro.ru/index.php/2014/06/11/integraciya-obnovlenij-v-obraz-windows-8/
Но как долго будет выполняться сканирование папки wsuscontent (у меня она занимает около 400 Гб) — я даже представить не могу.
Либо как вариант, если у вас везде одинаковые версии ОС — обновляете стендовый эталонный компьютер на WSUS, копируете с него каталог C:\Windows\SoftwareDistribution\Download на флешку и обновляете полученными cab файлами компьютеры в изолированной сети (все та же ссылка выше).
Один компьютер (1) подключен к Wsus (регулярно обновляется), но не к Интернету. Другой (2) (в другом подразделении) не подключен ни к Wsus, ни к Интернету. Встала задача: передать компьютер 2 все обновления Офиса 2016 компьютера 1. Попробовал с помощью PS скачать одно обновление (kb) с ключом Download. Скачалось, получилось два cab-файла. Попробовал их проинсталлировать https://winitpro.ru/index.php/2018/01/17/offline-ustanovka-cab-i-msu-fajlov-obnovlenij-windows/, не получилось, даже при помощи dism (он оказался на Win 7).
Бросил дальнейшую борьбу. В организации оказался набор обновлений офиса по май 2018 включительно (какой-то добрый человек в головной конторе как-то собрал). Передал на компьютер 2, этого оказалось достаточно (с точки зрения задачи обновления). Спасибо за помощь!
У меня ошибка возникает при выполнение скрипта
$Targets = «Server1», «Server2»
Update-WUModule -LocalPSWUSource «C:\Windows\system32\WindowsPowerShell\v1.0\Modules\PSWindowsUpdate» -ComputerName $Targets
Ошибка- Update-WUModule : The term ‘Update-WUModule’ is not recognized as the name of a cmdlet, function, script file, or opera
ble program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
Модуль установлен. Помогите разобраться.
Проверьте, что модуль у вас загружен:
Import-Module PSWindowsUpdate
И командлет Update-WUModule присуствует среди доступных:get-command -module PSWindowsUpdate
Какая версия модуля PSWindowsUpdate? У меня была 1.5.2.6.
Проверил на разных компах, этот командлет не загружается Update-WUModule . Не знаю почему. Версия такая же.
Обновите пожалуйста статью версия уже другая, некоторые команды не работают
Статью обновил под актальную весрию модуля PSWindowsUpdate 2.1.1.2. Все старые команды выкинул.
У вас в статье Set-ExecutionPolicy RemoteSigned, а скрипты все неподписанные.
Подскажите пожалуйста, цепляюсь к машине через Enter-PsSession, далее запускаю проверку обновлений, потом установку. В процессе установки через какое-то время получаю:
Исключение при вызове «CreateUpdateDownloader» с «0» аргументами: «Отказано в доступе. (Исключение из HRESULT: 0x800700
05 (E_ACCESSDENIED))»
C:\Windows\system32\WindowsPowerShell\v1.0\Modules\PSWindowsUpdate\Get-WUInstall.ps1:898 знак:53
+ $Downloader = $objSession.CreateUpdateDownloader <<<< ()
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ComMethodTargetInvocation
Не удается найти свойство "Updates" для данного объекта; убедитесь в том, что оно существует и является устанавливаемым
.
C:\Windows\system32\WindowsPowerShell\v1.0\Modules\PSWindowsUpdate\Get-WUInstall.ps1:899 знак:17
+ $Downloader. <<<< Updates = $objCollectionTmp
+ CategoryInfo : InvalidOperation: (Updates:String) [], RuntimeException
+ FullyQualifiedErrorId : PropertyNotFound
У меня сработало так:
Invoke-WUJob -ComputerName $ServerName -Script {ipmo PSWindowsUpdate; Install-WindowsUpdate -AcceptAll | Out-File C:\Windows\PSWindowsUpdate.log } -RunNow -Confirm:$false
Invoke-WUJob : To Invoke-WUJob you need PSWindowsUpdate 2.0.0.0 on destination machine! Current module version is 1.5.2.6
Как обновить на Windows 7 до версии 2.0.0.0 так и не смог понять.
Вы подключаетесь из Windows 10 к Win 7? На Win 7 какая версия PowerShell? Модуль PSWindowsUpdate на Win 7 скопирован вручную и он >2.0?
Спасибо за мануал!
Удалёнными Win11 управлять не получается- PermissionDenied. Куда копать?
Через PowerShell Remoting (Enter-Pssession, Invoke-Command) получается к удаленным компьютерам Win 11 подключится?
Enter-Pssession работает нормально- на компьютеры я захожу, Get-WUList -computername ругается PermissionDenied
такая же беда, winrm запущен, pswindowsupdate установлен, psession работает.
Но Get-WUList -computername — PermissionDenied.
Причем локально тоже ругается. если только открыть PowerShell от администратора, все работает.
От другого юзера (тоже админа) — ошибка «… you must run an elevated Windows Power Shell console…»
Хотелось бы помощи от автора поста
Добрый день!
Подскажите как объединить данные скрипты (см. ниже) в один (либо куда в первом скрипте нужно добавить вот эту строчку -SendReport –PSWUSettings @{SmtpServer=»smtp.winitpro.ru»;From=»[email protected]»;To=»[email protected]»;Port=25} -Verbose для получения сообщений об установке обновлений на нескольких $ServerNames ):
Поэтому в новых версиях модуля для удаленной установки обновлений используйте такую команду:
$ServerNames = “server1, server2, server3”
Invoke-WUJob -ComputerName $ServerNames -Script {ipmo PSWindowsUpdate; Install-WindowsUpdate -AcceptAll | Out-File C:\Windows\PSWindowsUpdate.log } -RunNow -Confirm:$false
Можно установить обновления на удаленном компьютере и отправить email отчет администратору:
Install-WindowsUpdate -ComputerName server1 -MicrosoftUpdate -AcceptAll — IgnoreReboot -SendReport –PSWUSettings @{SmtpServer=»smtp.winitpro.ru»;From=»[email protected]»;To=»[email protected]»;Port=25} -Verbose
Нужно вызвать команду отправки отчета внутри блока Script:
Invoke-WUJob -ComputerName $ServerNames -Script {ipmo PSWindowsUpdate; Install-WindowsUpdate -AcceptAll SendReport –PSWUSettings @{SmtpServer="smtp.winitpro.ru";From="[email protected]";To="[email protected]";Port=25}| Out-File C:\Windows\PSWindowsUpdate.log } -RunNow -Confirm:$false
PS C:\Windows\system32> Enter-PSSession CompName
[CompName]: PS C:\Users\kam\Documents> Install-WindowsUpdate
Отказано в доступе. (Исключение из HRESULT: 0x80070005 (E_ACCESSDENIED))
+ CategoryInfo : NotSpecified: (:) [Get-WindowsUpdate], UnauthorizedAccessException
+ FullyQualifiedErrorId : System.UnauthorizedAccessException,PSWindowsUpdate.GetWindowsUpdate
В чем проблема?
Вроде как не хватает прав. А если подключиться к удаленному компьютеру через RDP и попробовать установить модуль из локальной консоли. Если получится, возможно что-то есть какая-то оосбенност UAC и Enter-PSSession, я тогда посмотрю.
Под админом домена. По идее должно прав хватать.
Похоже действительно так нельзя. Для установки обновлений на удаленном компьютере нужно использовать Invoke-WUJob :
invoke-WUJob -ComputerName CompName -Script { Install-WindowsUpdate -AcceptAll -SendReport -IgnoreReboot } -Confirm:$false -verbose -RunNow
Все получилось через политики, спасибо, теперь XMOS драйвер не обновляется на тот, в котором пропадает режим ASIO. Правда теперь через другой USB порт того же ПК не установить то же самое устройство. Ну, будем искать как это исправить.