Скрипт для установки обновлений для windows

PS-Windows-Update-000.jpg

Установка большого количества обновлений Windows Update обычно относится к тем рутинным операциям, которые каждый системный администратор хотел бы как можно сильнее автоматизировать. Действительно, данная задача занимает довольно много времени и требует время от времени отвлекаться, чтобы перейти от одного этапа к другому. Отчасти выручить в этой ситуации может создание собственного дистрибутива, уже включающего все необходимые обновления, но воспользоваться им удается не всегда. Иногда надо просто быстро обновить до актуального состояния какую-либо систему, тогда на помощь нам придет PowerShell.

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.

Кроме того, в режиме аудита Windows 8 использовать Центр обновления Windows нельзя и установить обновления привычным образом не получится.

В этих, а также во многих других, случаях имеет смысл воспользоваться специальным модулем PowerShell для работы с Windows Update. Скачать его можно со страницы разработчика на Technet: Windows Update PowerShell Module. Мы настоятельно рекомендуем скачивать данный модуль именно оттуда.

Данный модуль работает в системах, начиная с Windows Vista и Server 2008 и требует PowerShell 2.0, хотя оптимально будет использование PowerShell 3.0 и выше.

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

  • %USERPROFILE%\Documents\WindowsPowerShell\Modules
  • %WINDIR%\System32\WindowsPowerShell\v1.0\Modules

Если вы хотите использовать данный модуль на постоянной основе, то имеет смысл разместить его в системной папке, в остальных случаях лучше использовать для этого директорию в профиле пользователя. Учтите, в папке Мои документы отсутствуют вложенные директории WindowsPowerShell и Modules, поэтому их следует создать самостоятельно.

PS-Windows-Update-001.jpgЧто дальше? В принципе уже сейчас можно воспользоваться одним из пакетных скриптов для данного модуля, доступных в сети. Но лучше сначала поработать с ним самостоятельно, после чего создать свой собственный пакетный файл.

Откроем консоль PowerShell от имени Администратора. Прежде всего выясним установленную политику командой:

Get-ExecutionPolicy

По умолчанию обычно установлена политика Restricted, которая запрещает выполнение скриптов даже администратору. Поэтому изменим ее на RemoteSigned, позволяющую запускать локальные скрипты, также, в целях безопасности, рекомендуем изменять политику только для текущего сеанса. Выполним команду:

Set-ExecutionPolicy RemoteSigned -Scope Process

Ключ -Scope позволяет задавать область применения политики, в данном случае это текущий процесс. Теперь можно выполнить импорт модуля командой:

Import-Module PSWindowsUpdate

В Windows 7 и иных системах, использующих PowerShell 2.0 вы можете столкнуться со следующей ошибкой: Имя «Unblock-File» не распознано как имя командлета. Она возникает из-за использования в одном из скриптов функции появившейся в PowerShell 3.0.

PS-Windows-Update-002.jpgОднако ее несложно исправить. В папке с модулем откройте файл PSWindowsUpdate.psm1 и удалите в первой строке последовательность:

| Unblock-File

PS-Windows-Update-003.jpgСохраните исправленный файл и повторите импорт модуля. Теперь можно приступить к работе с ним.

Прежде всего получим список доступных обновлений:

Get-WUInstall -ListOnly

А вот и первый сюрприз, в списке обновлений присутствуют языковые модули, Skype и обновление для перехода на Windows 10. Все это приехало бы на ваш компьютер, воспользуйся вы одним из популярных скриптов для этого модуля, доступных в сети.

PS-Windows-Update-004.jpgК счастью модуль обладает широкими возможностями. Мы можем исключить пакеты из списка по их категории, ключ -NotCategory, названию, ключ -NotTitle, или номеру обновления, ключ -NotKBArticleID. Используем каждый из них, в нашем случае уберем категорию языковых пакетов, Skype и обновление до Windows 10:

Get-WUInstall -NotCategory "Language packs" -NotTitle Skype  -NotKBArticleID KB3012973 -ListOnly

Вот, уже гораздо лучше.

PS-Windows-Update-005.jpgТеперь можно установить обновления командой:

Get-WUInstall -NotCategory "Language packs" -NotTitle Skype  -NotKBArticleID KB3012973 -AcceptAll -IgnoreReboot

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

PS-Windows-Update-006.jpgУбедившись, что все работает как надо, можно создать собственный пакетный файл, откроем блокнот и в одну строку запишем:

PowerShell -ExecutionPolicy RemoteSigned -Command Import-Module PSWindowsUpdate; Get-WUInstall -NotCategory "Language packs" -NotTitle Skype  -NotKBArticleID KB3012973 -AcceptAll -IgnoreReboot

Данная команда запускает PowerShell, устанавливает политику RemoteSigned, импортирует модуль, затем передает ему вышеуказанную команду. В общем делает все тоже самое, что мы только-что выполнили вручную. Сохраните данный файл как PSWindowsUpdate.cmd и теперь все что вам потребуется, это разместить модуль в нужном расположении и запустить данный пакетный файл с правами администратора.

Удобно? Да. Правда учтите, что некоторые обновления требуют обязательной установки предыдущих, поэтому, если вы давно не обновлялись, данный скрипт придется запускать несколько раз. Но это все равно проще, чем проделывать все эти операции вручную, кликнул на скрипт и занимайся своими делами, время от времени поглядывая на экран.

В Windows 8 языковые пакеты через WindowsUpdate не распространяются, поэтому команду можно немного упростить.

Get-WUInstall -NotTitle Skype  -NotKBArticleID KB3012973 -AcceptAll -IgnoreReboot

Однако на этом возможности данного модуля не заканчиваются, он позволяет быстро установить нужные обновления зная только их номер. Это значительно облегчает задачу, так как не надо посещать сайт Microsoft, искать необходимую статью и скачивать пакет именно для вашей версии системы.

Для установки отдельного пакета используйте команду (номер пакета использован исключительно для примера):

Get-WUInstall -KBArticleID KB3087916  -AcceptAll

Если надо установить несколько пакетов, то разделите их номера запятыми и добавьте ключ -IgnoreReboot, например:

Get-WUInstall -KBArticleID KB3066441, KB3078676  -AcceptAll -IgnoreReboot

PS-Windows-Update-007.jpg

Мы не ставили своей целью дать в данной статье полный обзор этого модуля, сфокусировавшись на решении конкретной задачи. Поэтому, если вас заинтересовали иные возможности данного модуля, то обратитесь к встроенной справке. Для этого откройте в блокноте файл интересующей функции, например, Get-WUInstall.ps1, каждый из которых автор снабдил подробным описанием.

PS-Windows-Update-008.jpgНадеемся, что данный материал поможет вам автоматизировать некоторые рутинные задачи и добавит в ваш арсенал новый, удобный инструмент.

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.

Вы можете использовать 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

установка powershell модуля PSWindowsUpdata в Windows из галереи скриптов

В старых версиях Windows 2012R2/Windows 8.1 и ниже при установке PowerShell модуля может появится ошибка:

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).

  1. Скачайте модуль PSWindowsUpdate на любой онлайн компьютер:
    Save-Module –Name PSWindowsUpdate –Path C:\ps\
    ;
  2. Скопируйте модуль на целевой компьютер, и поместите его в каталог
    %WINDIR%\System32\WindowsPowerShell\v1.0\Modules
    (при постоянном использовании модуля это лучший вариант);
  3. Разрешите выполнение PowerShell скриптов:
    Set-ExecutionPolicy –ExecutionPolicy RemoteSigned -force
  4. Теперь вы можете импортировать модуль в свою сессию PowerShell:
    Import-Module PSWindowsUpdate

Примечание. В Windows 7 / Server 2008 R2 при импорте модуля 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 на компьютере к настройкам по-умолчанию.

список командлетов модуля pswindowupdate

Чтобы проверить текущие настройки клиента 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.

Reset-WUComponents сбросить настройка агента обновлений Windows

Управление обновлениями 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 получить список обновлений доступных для установки в 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 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.

Get-WUlist получить обновления из каталого Microsoft, а не Windows

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

Get-WUApiVersion

ComputerName PSWindowsUpdate PSWUModuleDll ApiVersion WuapiDllVersion
------------ --------------- ------------- ---------- ---------------
FS01 2.2.0.2 2.2.0.2 8.0 10.0.19041.1320

Get-WUApiVersion - узнать версию агента windows update

Чтобы убрать определенные продукты или конкретные 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 установка обновлений windows с помощью powershell

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

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 - история установки обновлений

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

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

Get-WUHistory найти установленные обновления

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

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

Проверить, нужна ли перезагрузка компьютеру после установки обновления:

Get-WURebootStatus –ComputerName WKS80JT

Get-WURebootStatus проверить нужна ли перезагрузка после установки обновлений

Проверьте значение атрибутов
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

Hide-WindowsUpdate - скрыть обновление, запретить установку

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

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

Get-WindowsUpdate –IsHidden

Обратите внимание, что в колонке Status у скрытых обновлений появился атрибут H (Hidden).

Get-WindowsUpdate –IsHidden отобразить скрытые обновления windows

Отменить скрытие некоторых обновлений можно так:

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

или так:

Show-WindowsUpdate -KBArticleID $HideList

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

ru-board.com

GenUpdates

🇷🇺 Внимание! Скачивать ТОЛЬКО по этой ссылке https://github.com/dialmak/GenUpdates/archive/master.zip

Описание

Скрипт «GenUpdates.cmd» предназначен для генерирования скриптов установки обновлений Windows с возможностью проконтролировать коды ошибок при установке обновлений.
Расположите «GenUpdates.cmd» вместе с «Settings.ini» перед папками с скачанными обновлениями.
В «Settings.ini» укажите параметр update_folder — относительный путь к папке с обновлениями, остальные параметры опциональны.
Затем запустите скрипт «GenUpdates.cmd» и следуйте подсказкам. Сгенерированный скрипт для установки обновлений Windows будет записан в ту же папку, что и скрипт «GenUpdates.cmd».

Внимание! Если у вас после открытия списка обновлений — «крякозябры», тогда инсталлируйте notepad++.


Быстрый старт

Пример создания скриптов установки обновлений Windows для списка Рекомендации по обновлению ОС Windows 7 SP1 + KB3125574 от TAILORD

  • Сделать папочку «Updates 7» и в ней папки
    * «Updates 01» (для Списка 1 пункты 1-39)
    * «Updates 02» (для Списка 1 пункт 40)
    * «Updates 03» (для Списка 1 пункт 41)
    * ну и т.д. и т.п.
    * «Addons» (для списка Дополнительно)

  • Скачать файлы из списков в соответствующие папки.

  • Положить в папку «Updates 7» скрипт «GenUpdates.cmd» с файлом настроек «Settings.ini».

  • Указать в «Settings.ini» папку «Updates 01» и запустив «GenUpdates.cmd» — сгенерировать скрипт установки обновлений следуя подсказкам.

  • Затем проделать тоже самое для остальных папок.

  • Пользоваться 😃


Полный список кодов ошибок Центра обновления

https://msdn.microsoft.com/en-us/library/windows/desktop/hh968413(v=vs.85).aspx
https://support.microsoft.com/en-us/kb/938205
https://social.technet.microsoft.com/wiki/contents/articles/15260.windows-update-agent-error-codes.aspx


Содержимое файла «Settings.ini»

# Этот файл "Settings.ini" используется для настроек параметров скрипта 'GenUpdates.cmd'.    
# Файл "Settings.ini" должен быть в кодировке Unicode (UCS-2 LE BOM).   

[Settings]    
# Переменная update_folder указывает на относительный путь к папке с обновлениями и расширениями. Для текущей папки оставить пустой.   
# Пример: update_folder=Updates 01\x64   
update_folder=  
   
# Переменная sort_list указывает порядок сортировки списка обновлений. Может принимать значение time, -time, abc или -abc   
# time сортировка по дате\времени от ранних к поздним, -time сортировка по дате\времени от поздних к ранним, abc сортировка по алфавиту, -abc cортировка по обратному алфавиту.     
# Опциональный параметр, по умолчанию используется: sort_list=time   
sort_list=   
    
# Выбор поля времени для сортировки. Может использоваться время создания файла sort_time=1, время последнего использования sort_time=2 или время последнего изменения sort_time=3.    
# Опциональный параметр, по умолчанию используется время последнего изменения: sort_time=3   
sort_time=   
   
# Переменная text_editor указывает текстовый редактор для использования. Пример: text_editor=C:\Program Files\My Text Editor\TextEditor++.exe   
# Опциональный параметр, по умолчанию будет использоваться notepad++, если notepad++ не установлен - по умолчанию будет использоваться системный notepad.   
text_editor=   
   
# Имя будущего сгенерированного CMD файла для установки обновлений.     
# Опциональный парамет, по умолчанию имя генерируется из update_folder и текущей даты.   
cmd_name=   
   
# Переменная filter_ext указывает фильтр расширений файлов для обновлений. Пример: filter_ext=.msu .cab .exe .msi .psf .esd    
# Опциональный парамет, по умолчанию используется: filter_ext=.msu .exe .cab .msi    
filter_ext=   

Время на прочтение
5 мин

Количество просмотров 16K

Эта статья является логическим продолжением моей предыдущей статьи. Развивая тему добавления (установки/интеграции) пакетов обновлений в образ Windows Я решил написать скрипт оперирующий командами DISM, который автоматизирует процесс и избавляет системных администраторов от рутинных действий. Универсальность скрипта состоит в том, что с его помощью можно установить пакеты обновления на «живую» систему, либо интегрировать в образ Windows — файл install.wim. Гибкость скрипта состоит в том, что его работу можно настроить изменив значение нескольких переменных в начале всего кода.

Как и в предыдущей статье, для примера, мы будем добавлять к образу Windows так называемое Convenience rollup update (KB3125574), а также необходимое Servicing stack update (KB3177467). В ходе работы над скриптом выяснилось, что после интеграции в образ KB3177467, он (образ — install.wim), становится непригодным для дальнейших интеграций. Если устанавливать KB3177467 на «живую» ОС то проблем не возникает. У данной проблемы есть два решения: 1) интегрировать KB3177467 последним 2) заменить «проблемное» обновление его предыдущей версией — KB3020369. Я выбрал второй вариант, реализовав в скрипте ветвление по условию.

Скрипт

@echo off
Title Convenience Rollup - most important updates after SP1

set _arch=x64
set _file=install.wim
set _img=Online
set _mnt=mount
set _lev=2

:pre_menu
cls
dism /Get-WimInfo /LogLevel:%_lev% /WimFile:%_file%
echo -------------------------------------------------------------------------------
if %ERRORLEVEL% NEQ 0 if %ERRORLEVEL% EQU 2 (goto :bit) else (pause & exit)
set /p _ind=Input index or press [Enter] for quit: || exit
if %_ind% EQU 0 goto :bit
if %_ind% GTR 0 if %_ind% LEQ 24 goto :ind_menu
goto :pre_menu

:ind_menu
cls
dism /Get-WimInfo /LogLevel:%_lev% /WimFile:%_file% /Index:%_ind%
echo -------------------------------------------------------------------------------
if %ERRORLEVEL% NEQ 0 pause & goto :pre_menu
choice /c abcdefghijklmnopqrstuvwxyz /n /m "Mount selected image? [m] "
if %ERRORLEVEL% EQU 13 goto :mount
goto :pre_menu

:bit
if %_img%==Online (if "%PROCESSOR_ARCHITECTURE%" == "x86" if not defined PROCESSOR_ARCHITEW6432 set _arch=x86)^
else (dism /Get-WimInfo /LogLevel:%_lev% /WimFile:%_file% /Index:%_ind% /English | find "Architecture : x86" > nul && set _arch=x86)
goto :add

:add
cls
echo Getting packages list. Please wait...
dism /%_img% /Get-Packages /LogLevel:%_lev% /English > %TEMP%\packages.txt
echo -------------------------------------------------------------------------------
if not %_img%==Online (
echo Add: Servicing stack update KB3020369
call :exist .\%_arch%\Windows6.1-KB3020369-%_arch%.cab ||^
dism /%_img% /Add-Package /LogLevel:%_lev% /PackagePath:.\%_arch%\Windows6.1-KB3020369-%_arch%.cab /NoRestart
echo -------------------------------------------------------------------------------
) else (
echo Add: Servicing stack update KB3177467
call :exist .\%_arch%\Windows6.1-KB3177467-%_arch%.cab ||^
dism /%_img% /Add-Package /LogLevel:%_lev% /PackagePath:.\%_arch%\Windows6.1-KB3177467-%_arch%.cab /NoRestart
echo -------------------------------------------------------------------------------
)
echo Add: Convenience rollup update KB3125574
call :exist .\%_arch%\Windows6.1-KB3125574-v4-%_arch%.cab ||^
dism /%_img% /Add-Package /LogLevel:%_lev% /PackagePath:.\%_arch%\Windows6.1-KB3125574-v4-%_arch%.cab /NoRestart
echo -------------------------------------------------------------------------------
del %TEMP%\packages.txt
if not exist %_file% exit
pause
goto :unmount

:exist
dism /%_img% /Get-PackageInfo /LogLevel:%_lev% /PackagePath:%1 /English | find "Package Identity" | findstr /g:/ %TEMP%\packages.txt > nul
exit /b

:mount
cls
md %_mnt%
dism /Mount-Wim /LogLevel:%_lev% /WimFile:%_file% /Index:%_ind% /MountDir:%_mnt%
if %ERRORLEVEL% NEQ 0 rd %_mnt% & pause & exit
set _img=Image:%_mnt%
goto :bit

:unmount
cls
if not %_img%==Online (
dism /Unmount-Wim /LogLevel:%_lev% /MountDir:%_mnt% /Commit
rd %_mnt%
)
set _arch=x64
set _img=Online
goto :pre_menu

Файлы и папки

Файлы пакетов обновлений здесь не прилагаю, так как указанные в скрипте взяты для образца. По месту нахождения скрипта должны быть созданы папки x64 и x86 в которые нужно разместить нужные пакеты обновлений. Сам файл скрипта можно сохранить в кодировке ANSI если не использовать кириллицу для вывода информационных сообщений. А если хочется видеть русский текст, то нужно cmd-файл сохранить в кодировке OEM 866.

Использование

Как уже отмечалось, скрипт может установить обновления или интегрировать их. Если в папке запуска отсутствует файл образа — install.wim, то скрипт выполняет установку обновлений в полностью автоматическом режиме. Если в папке запуска присутствует файл образа — install.wim, то скрипт выполняет считывание из него информацию об имеющихся «индексах» и предлагает ввести номер. После этого отображается расширенная информация о выбранном «индексе» выдаётся запрос на монтирование. Нажатие любой клавиши приводит к возврату, а нажатие клавиши [m] запускает следующую цепочку действий: монтирование образа, интеграция обновлений, размонтирование образа, возврат в меню выбора «индеска». После чего можно выбрать другой «индекс» для интеграции обновлений. Выбор «индекса» под номером 0 запускает установку обновлений на «живую» ОС.

Разбор кода

Вначале командой set происходит установка переменных. Можно изменить предполагаемое имя файла образа install.wim (например, на install.esd). Можно изменить имя папки монтирования или задать путь, если папка монтирования должна находится за пределами папки запуска. Можно изменить «уровень» логирования, для исключения информационных сообщений из файла лога системы DISM.

:pre_menu

Предварительное меню. Получение основной информации о wim-файле с контролем ошибок. Если ошибка 2 — отсутствует wim-файл, то запуск в режиме Online. Не нашел информацию о максимальном количестве «индексов» в одном образе и установил значение 24.

:ind_menu

Индексное меню. Получение расширенной информации о выбранном «индексе» в wim-файле с контролем ошибок. Предложение смонтировать «индекс».

:bit

Определение разрядности ОС. Для интерактивного обслуживания считываются системные переменные среды, а для автономного обслуживания из образа запрашивается необходимая информация и в ней ищется ключевая строка.

:add

Добавление пакетов. Чтобы не делать лишней работы вначале происходит запрос списка уже добавленных (установленных или интегрированных) пакетов, а потом перед каждой командой запуска осуществляется вызов псевдофункции для проверки.

:exist

Псевдофункция проверки. Работа описана в статье Проверка присутствия пакета обновления в системе перед установкой. Код слегка подправлен.

:mount

Монтирование образа. Предварительно создаётся папка монтирования. Контроль ошибок. Изменяется переменная определяющая спецификацию образа, теперь указывает на путь к автономному образу.

:unmount

Размонтирование образа. Если выполнялось интерактивное обслуживание (/Online), то размонтировать не нужно. Возвращение переменных к исходным значениям.

Совместимость

Работа данного скрипта тестировалась на ОС Windows 7 со встроенной утилитой dism.exe версии 6.1.7600.16385. В версиях ОС Windows 8, 8.1, 10 утилита dism.exe системы DISM имеет более высокую версию. Думаю, обратная совместимость сохранена, и скрипт будет также работоспособен. К тому же появится возможность работать с esd-файлами.

Download Windows Speedup Tool to fix errors and make PC run faster

Windows Updates are very important and integral to the stability of the Windows operating system and considered very mandatory in many corporate companies as well as for consumers. Even though the Windows update is automatic, sometimes the Windows patches (KB updates) will not install automatically. In this post, we will show you how you can use a Batch file to download & install Windows Updates on Windows 10 computers.

Windows Updates often include feature enhancements and security updates to protect Windows from malware and malicious attacks. Windows Update can also be used to update drivers for popular hardware devices. Patches and other security updates are routinely released through Windows Update on the second Tuesday of every month – it’s called Patch Tuesday.

To use a batch file to download and install Windows updates, follow the instructions outlined below.

To begin, you’ll need to make a note of the KB number which you want to install, then you have to create a batch file to download the Windows updates from the Microsoft Update Catalog.

  • Head over to the Microsoft Update Catalog and search for the KB number which you want to download.
  • Choose the correct patches/updates which is appropriate for your system architecture and operating system.
  • Click on the Download button, then you will get a popup to download the package.
  • Right-click on the msu link and copy the link.  You’ll have to paste it accordingly in the script below.
  • Open Notepad and copy-paste the script below. Make sure the KB numbers and the MSU link are replaced correctly as per your requirement.
@echo off
cd/
echo "Downloading Patches; This will take several minutes depends on your Internet speed"
powershell -Command "(New-Object Net.WebClient).DownloadFile('http://download.windowsupdate.com/c/msdownload/update/software/uprl/2020/03/windows-kb000000-x64-v5.81_74132082f1421c2217b1b07673b671ceddba20fb.exe', ' kb000000_Scan.exe')"
echo "1 out of 4 downloaded"
echo "****"
powershell -Command "(New-Object Net.WebClient).DownloadFile('http://download.windowsupdate.com/c/msdownload/update/software/secu/2020/03/windows10.0- kb000000-x64_5db6cfc57a8bda4d13107ad24b3fe8fd790219cf.msu', ' kb000000.msu')"
echo "2 out of 4 downloaded"
echo "****"
powershell -Command "(New-Object Net.WebClient).DownloadFile('http://download.windowsupdate.com/c/msdownload/update/software/secu/2020/04/windows10.0- kb000000-x64_705fda69935538eab5054d9d616e1761742816ec.msu', ' kb000000.msu')"
echo "3 out of 4 downloaded"
echo "****"
powershell -Command "(New-Object Net.WebClient).DownloadFile('http://download.windowsupdate.com/d/msdownload/update/software/secu/2020/04/windows10.0- kb000000-x64_5411f88ea08bfc0ac98f388f5a3bdc8bcfea3261.msu', ' kb000000.msu')"
echo "4 out of 4 are downloaded, Now installing patches!"
echo "****"
@echo off
cd/
wusa.exe C:\ kb000000.msu /quiet /norestart
echo " kb000000 is installed, processing the next one"
echo "****"
wusa.exe C:\ kb000000.msu /quiet /norestart
echo " kb000000 is installed, processing the next one"
echo "****"
echo "This will take 5-10 mins for installing"
echo "****"
wusa.exe C:\ kb000000.msu /quiet /norestart
echo "All the patches are installed & Your system is about to restart now"
shutdown -r

Read next: What is Windows Update Servicing Cadence?

Obinna has completed B.Tech in Information & Communication Technology. He has worked as a System Support Engineer, primarily on User Endpoint Administration, as well as a Technical Analyst, primarily on Server/System Administration. He also has experience as a Network and Communications Officer. He has been a Windows Insider MVP (2020) and currently owns and runs a Computer Clinic.

  • Скрытые файлы и папки в windows 10 на диске с
  • Скрылась панель задач на рабочем столе windows
  • Скрипт для удаления windows defender
  • Скрипт удаления ненужного по windows 10
  • Скрытые разделы при установке windows 10