Для управления обновлениями Windows можно использовать PowerShell модуль PSWindowsUpdate. Модуль PSWindowsUpdate доступен для загрузки из PowerShell Gallery и позволяет администратору просканировать, скачать, установить, удалить или скрыть обновления на локальном или удаленных рабочих станциях и серверах Windows.
- Установка модуля управления обновлениями PSWindowsUpdate
- Сканировать и загрузить обновления Windows с помощью PowerShell
- Установка обновлений Windows с помощью команды Install-WindowsUpdate
- >Просмотр истории установленных обновлений в Windows
- Удаление обновлений в Windows с помощью PowerShell
- Скрыть ненужные обновления Windows с помощью PowerShell
- Управление обновлениями Windows на удаленных компьютерах через PowerShell
Установка модуля управления обновлениями PSWindowsUpdate
В современных версиях Windows 10/11 и Windows Server 2022/2019/2016 модуль PSWindowsUpdate можно установить из онлайн репозитория PowerShell Gallery с помощью команды:
Install-Module -Name PSWindowsUpdate
Подтвердите добавление репозитариев, нажав Y. Проверьте, что модуль управлениям обновлениями установлен в Windows:
Get-Package -Name PSWindowsUpdate
- В изолированной среде модуль PSWindowsUpdate можно установить в офлайн режиме;
- В старых версиях Windows для использования модуля нужно предварительно обновить версию PowerShell.
Можно удаленно установить PSWindowsUpdate на другие компьютеры в сети. Следующая команда скопирует файлы модуля на указанные компьютеры (для доступа к удаленным компьютерам используется WinRM).
$Targets = "srv1.winitpro.loc", "srv2.winitpro.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
Выведите список доступных командлетов:
Get-command -module PSWindowsUpdate
Проверить текущие настройки клиента 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.
Сканировать и загрузить обновления Windows с помощью PowerShell
Чтобы просканировать компьютер на сервере обновлений и вывести список обновлений, которые ему требуется, выполните команду:
Get-WindowsUpdate
или
Get-WUList
Команда должна вывести список обновлений, которые нужно установить на вашем компьютере.
Value does not fall within the expected range.
Для исправления ошибки нужно сбросить настройки агента Windows Update, перерегистрировать библиотеки и восстановить исходное состояние службы wususerv с помощью команды:
Reset-WUComponents -Verbose
Чтобы проверить, откуда получает ли Windows обновлений с серверов Windows Update в Интернете или локального WSUS, выполните команду:
Get-WUServiceManager
В этом примере вы видите, компьютер настроен на получение обновлений с локального сервера 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
Чтобы убрать определенные продукты или конкретные KB из списка обновлений, которые получает ваш компьютер, вы их можете исключить по:
- Категории (-NotCategory);
- Названию (-NotTitle);
- Номеру обновления (-NotKBArticleID).
Например, чтобы исключить из списка обновления драйверов, OneDrive, и одну конкретную KB:
Get-WUlist -NotCategory "Drivers" -NotTitle OneDrive -NotKBArticleID KB4533002
Скачать все доступные обновления на компьютер (обновления загружаются в локальный кэш обновлений в каталоге
C:\Windows\SoftwareDistribution\Download
).
Get-WindowsUpdate -Download -AcceptAll
Windows загрузит все доступные патчи сервера обновлений (MSU и CAB файлы) в локальный каталог обновлений, но не запустит их автоматическую установку.
Установка обновлений 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
Проверить, нужна ли перезагрузка компьютеру после установки обновления (атрибуты RebootRequired и RebootScheduled):
Get-WURebootStatus
>Просмотр истории установленных обновлений в Windows
С помощью команды Get-WUHistory вы можете получить список обновлений, установленных на компьютере ранее автоматически или вручную.
Можно получить информацию о дате установки конкретного обновления:
Get-WUHistory| Where-Object {$_.Title -match "KB4517389"} | Select-Object *|ft
Вывести даты последнего сканирования и установки обновлении на компьютере:
Get-WULastResults |select LastSearchSuccessDate, LastInstallationSuccessDate
Удаление обновлений в Windows с помощью PowerShell
Для корректного удаления обновления Windows используется командлет Remove-WindowsUpdate. Вам достаточно указать номер KB в качестве аргумента параметра KBArticleID.
Remove-WindowsUpdate -KBArticleID KB4011634
Скрыть ненужные обновления Windows с помощью PowerShell
Вы можете скрыть определенные обновления, чтобы они никогда не устанавливались службой обновлений Windows Update на вашем компьютер (чаще всего скрывают обновления драйверов). Например, чтобы скрыть обновления KB2538243 и KB4524570, выполните такие команды:
$HideList = "KB2538243", "KB4524570"
Get-WindowsUpdate -KBArticleID $HideList -Hide
или используйте alias:
Hide-WindowsUpdate -KBArticleID $HideList -Verbose
Теперь при следующем сканировании обновлений с помощью команды Get-WindowsUpdate скрытые обновления не будут отображаться в списке доступных для установки.
Вывести список скрытых обновлений:
Get-WindowsUpdate –IsHidden
Обратите внимание, что в колонке Status у скрытых обновлений появился атрибут H (Hidden).
Отменить скрытие обновлений можно так:
Get-WindowsUpdate -KBArticleID $HideList -WithHidden -Hide:$false
или так:
Show-WindowsUpdate -KBArticleID $HideList
Управление обновлениями Windows на удаленных компьютерах через PowerShell
Практически все командлеты модуля PSWindowsUpdate позволяют управлять обновлеями на удаленных компьютерах. Для этого используется атрибут
-Computername Host1, Host2, Host3
. На удаленных компьютерах должен быть включен и настроен WinRM (вручную или через GPO). Модуль 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
С помощью Invoke-Command можно разрешить использовать модуль PSWindowsUpdate на удаленных компьютерах и открыть необходимые порты в Windows Defender Firewall (команда
Enable-WURemoting
):
Invoke-Command -ComputerName $computer -ScriptBlock {Set-ExecutionPolicy RemoteSigned -force }
Invoke-Command -ComputerName $computer -ScriptBlock {Import-Module PSWindowsUpdate; Enable-WURemoting}
Проверить список доступных обновлений на удаленном компьютере:
Get-WUList –ComputerName server2
Скачать и установить все доступные обновлений на нескольких удаленных серверах:
$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)
Проверить статус задания установки обновлений:
Get-WUJob -ComputerName $ServerNames
Если команда вернет пустой список, значит задача установки на всех компьютерах выполнена.
Проверьте наличие обновления на нескольких удаленных компьютерах:
"server1","server2" | Get-WUHistory| Where-Object {$_.Title -match "KB4011634"} | Select-Object *|ft
Получить дату последней установки обновлений на всех компьютерах в домене можно с помощью командлета 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
}
PowerShell модуль PSWindowsUpdate удобно использовать для загрузки и установки обновлений Windows из командной строки (единственный доступны вариант в случае установки обновлений на хосты без графического интерфейса: Windows Server Core и Hyper-V Server). Также этот модуль незаменим, когда нужно одновременно запустить и проконтролировать установку обновлений сразу на множестве серверов/рабочих станциях Windows.
В чём смысл ковыряния в командной строке с обновлениями, когда есть удобный интерфейс 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
есть ещё один способ избавится от ошибки «Отказано в доступе. (Исключение из HRESULT: 0x80070005 (E_ACCESSDENIED))»
заходим на компьютер
New-PSSession -ComputerName SRV4 | Enter-PSSession
регистрируем файл настроек
New-PSSessionConfigurationFile -RunAsVirtualAccount -Path .\VirtualAccount.pssc
Register-PSSessionConfiguration -Name 'VirtualAccount'-Path .\VirtualAccount.pssc -Force
на этом этапе нас выбросит из сессии из-за перезапуска службы winrm, подключаемся уже с помощью файла конфигурации
New-PSSession -ComputerName SRV4 -ConfigurationName VirtualAccount | Enter-PSSession
теперь проблем с доступом быть не должно
Все получилось через политики, спасибо, теперь XMOS драйвер не обновляется на тот, в котором пропадает режим ASIO. Правда теперь через другой USB порт того же ПК не установить то же самое устройство. Ну, будем искать как это исправить.
Привет! Никто не сталкивался с тем, что Get-WULastResults выдает недостоверные данные на Windows Server 2022 Core? Get-WUHistory при этом показывает честно последнюю дату установки.
На других (не Core) редакциях Windows — всё ок
Обновления модуля делать пробовал, не помогло.
На гитхабе есть в хистори такая запись, что v2.1.0 Fixed Get-WULastResults bugs, но после апдейта у меня 2.2.1.4 и проблема всё-равно есть
Добрый вечер! Можете мне помочь? Дело в том, что я не могу настроить блютуз в компьютере. Все статьи, что смог найти в сети — не работают. Сначала всё было хорошо, заменил «родную» плату AW-NB290H на более продвинутую AX210HMW появился второй диапазон (5Ггц что и было нужно) Через некоторое время мне подключили оптоволокно и адаптер отошёл на второй план. Блютуз тоже работал. С дуру удалил из папки «сетевые подключения» обе папки относящиеся к адаптеру, и из диспетчера устройств тоже, подумал — появятся после перезагрузки. Теперь потребовался мне блютуз и вот…Такое ощущение что он где то отключён. Менял плату адаптера на «родную» — толку «0». Будьте так любезны, помогите мне! Спасибо!
🩹Во многих организациях используется отложенная установка обновлений на хостах Windows Server. Если вам выделили окно обслуживания и нужно быстро скачать и установить обновления на всех серверах, удобно использовать PowerShell модуль PSWindowsUpdate:
1️⃣ Сформируйте список серверов, на которых нужно установить обновления.
🔹Можно получить список серверов из AD:
$Servers = Get-ADComputer -SearchBase "OU=Servers,DC=SPB,DC=winitpro,DC=loc" -Filter { OperatingSystem -like "*Windows Server*" } | Select -ExpandProperty name
🔹или из текстового файла:
$Servers = Get-Content c:\scripts\servers.txt
2️⃣ Выполнить установку обновлений на всех серверах из списка и автоматически перезагрузить:
Invoke-WuJob -ComputerName $Servers -Script { import-module PSWindowsUpdate; Set-ExecutionPolicy Bypass -Scope Process -Force; Install-WindowsUpdate -AcceptAll -AutoReboot | Out-File "C:\temp\PSWindowsUpdate.log"} -RunNow -Confirm:$false -Verbose -ErrorAction Ignore
Команда создаст на всех компьютерах задание планировщика с правами SYSTEM, которое запустите установку обновлений и выполнит перезагрузку по завершении.
3️⃣ Чтобы узнать состояние установки обновлений:
Get-WUJob -ComputerName $Servers
А кто подскажет действительно рабочий способ установки OpenSSH сервер на удаленный win10 хост? Хост в домене. Есть права доменного администратора.
Get-WUlist -MicrosoftUpdate -ComputerName $computer
По данной команде на ПК
$computer
выполняется поиск из под учётной записи, от которой запущено окно PowerShell.Но для данной учётной записи прокси для выхода в интернет не задано, поэтому команда не отрабатывает.
Как сделать так, чтобы удалённо прокси для данной УЗ задавался и команда в итоге отрабатывала.
Наверно в таком сценарии использовать именно Get-WUlist для проверки обновления не удастся. Как вариант, можно настроить на удаленных компьтерах PowerShell профиль для вашего пользователя, который задает настройки прокси. (https://winitpro.ru/index.php/2017/04/13/powershell-cherez-proksi/)
Или делать проверку обновлений не через Get-WUlist, а через PowerShell remoting. Типа:
Invoke-Command -ComputerName $computer -ScriptBlock { netsh winhttp set proxy "192.168.0.14:3128" ; Get-WUlist -MicrosoftUpdate}
https://winitpro.ru/index.php/2020/07/27/powershell-invoke-command-zapuska-komand-na-udalennyx-kompyuterax/
Вопрос.
На локальном ПК:
Если задать прокси только командой
netsh winhttp set proxy "своя прокси:порт"
, тоGet-WUlist -MicrosoftUpdate
показывает обновления, но если дописать ключ-Download
, т.е.Get-WindowsUpdate -MicrosoftUpdate -Download -KBArticleID KBобновления -AcceptAll
, то оно не скачивается. В данном случае пришлось прописать ещё прокси, которое задаётся через Параметры -> Сеть и интернет — > Прокси сервер -> Использовать прокси-сервер: включить переключатель и указать свою прокси и порт, или использовать команды:New-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings" -Name ProxyServer -Value "своя прокси:порт" -PropertyType String -Force
New-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings" -Name ProxyEnable -Value "1" -PropertyType DWord -Force
Через
Invoke-Command
иEnter-PSSession
можно получить только список обновлений, но не установить их, т.к. скачивание и установка через удалённый режим запрещены.Но при использовании
Invoke-WUJob
задача из планировщика запускается от SYSTEM.Сам вопрос: Как для SYSTEM задать прокси, который задаётся через параметры Windows или ключи реестра (выше написал)?
Если данную прокси не прописать для SYSTEM, то обновления не скачаются. У меня так задача висела 2 часа безрезультатно, пока я её не удали, хотя локально на данном ПК всё ставится командами PS.