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

Обновлено: 03.07.2024

Мне было интересно, есть ли простой и легкий способ просмотра того, какие программы установлены на удаленном компьютере? Я испытываю искушение использовать Spiceworks, но мне хотелось бы что-то более легкое, как скрипт. Я немного играл с WMIC и могу получить список программ для своего компьютера, но я не знаю, могу ли я сделать то же самое с ним для удаленного компьютера. Любые идеи?

Изменить: Извините, что я забыл ОС, мы используем в основном Windows XP и 7, я использую Windows 7. Я ищу что-то, что нужно запустить в фоновом режиме, без пользователя, который в настоящее время использует компьютер. Я хотел бы иметь возможность делать это в течение рабочего дня, пока люди работают и делают это, не прерывая их. Я действительно ценю ответы Linux, так как я пытаюсь узнать больше о Linux и планировать лично меняться за какое-то время.

Вы можете использовать один из инструментов Sysinternals PSinfo:

PSinfo -s \\ имя_компьютера

сообщит вам, что установлено на удаленном компьютере.

В дистрибутиве Linux на основе rpm вы можете запустить следующее:

Для распределения на основе deb передайте это команде ssh:

Для Gentoo (за предоставленный комментарий от Monksy ):

WMIC можно использовать удаленно, по умолчанию, с учетной записью, входящей в группу «Администраторы». Вы можете делегировать доступ WMI только для чтения к обычным пользователям.

SNMP также может использоваться - вам просто нужно настроить сообщество только для чтения. Вам нужно просмотреть таблицу hrSWInstalled: snamwalk -c public -v2c server_IP hrSWInstalled

Вот сценарий PowerShell, который будет подключаться к разделу реестра HKLM \ Software \ Microsoft \ Windows \ Uninstall, вытаскивать ключи, получать их отображаемые имена и отправлять их в текстовый файл.

Есть миллион программ, которые сделают это. Некоторые более легкие и легкие, чем другие.

Вот только одна из бесчисленных программ, которые делают это:

Если это компьютер с Windows, вы можете запустить «WinAudit» (бесплатно, просто найти его) в запланированном задании. Он генерирует HTML или текстовые отчеты и такие, которые вы можете сохранить на сетевом диске и просмотреть с удаленного компьютера.

Удаленный рабочий стол. Вы подключаетесь и используете его, как если бы это была локальная машина. Работает в * nix тоже.

date

03.06.2020

directory

PowerShell, Windows 10, Windows Server 2016

comments

комментариев 28

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

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

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

Install-Module -Name PSWindowsUpdate

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

Install-Module -Name PSWindowsUpdate –Force

После окончания установки нужно проверить наличие пакета:

Get-Package -Name PSWindowsUpdate

Install-Module -Name PSWindowsUpdate устаовка модуля из галереи

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

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

Обратите внимание, что в галерее скриптов TechNet доступна только старая версия модуля – v 1.5.6. В то время как менеджер пакетов NuGet устаналивает из PowershellGallery версию PSWindowsUpdate 2.1.1.2. В разных версиях модуля доступные командлеты и параметры могут отличаться. Примечание. В Windows 7 / Server 2008 R2 при импорте модуля PSWindowsUpdate вы можете столкнутся с ошибкой вида: Имя «Unblock-File» не распознано как имя командлета. Дело в том, что в модуле используются некоторые функции, которые появились только в PowerShell 3.0. Для использования этих функций вам придется обновить PowerShell, либо вручную удалить строку | Unblock-File из файла PSWindowsUpdate.psm1

После установки модуля PSWindowsUpdate на своем компьютере вы можете удаленно установить его на другие компьютеры или сервера с помощью командлета Update-WUModule . Например, чтобы скопировать PSWindowsUpdate модуль с вашего компьютера на два удаленных сервера, выполните команды (нужен доступ к удаленным серверам по протоколу SMB, порт TCP 445):

$Targets = "Server1", "Server2"
Update-WUModule -ComputerName $Targets –Local

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

Save-Module -Name PSWindowsUpdate –Path \\fs01\ps\

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

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

get-command -module PSWindowsUpdate

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

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

Управление обновлениями Windows на удаленных компьютерах через PowerShell

Практически все командлеты модуля PSWindowsUpdate позволяют управлять установкой обновлений на удаленных компьютерах. Для этого используется атрибут -Computername Host1, Host2, Host3.

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

Установите модуль PSWindowsUpdate на удаленных компьютерах и разрешите в файерволе доступ по динамическим RPC портам к процессу dllhost.exe.

Получаем список доступных обновлений Windows из PowerShell

Вывести список обновлений, доступных для данного компьютера на сервере обновлений можно с помощью команд Get-WindowsUpdate или Get-WUList.

Get-WUList - получить список требуемых обновлений из powershell

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

Get-WUList –ComputerName server2

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

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

Как вы видите, компьютер настроен на получение обновлений с локального сервера WSUS (Windows Server Update Service = True). В этом случае вы должны увидесть список обновлений, одобренных для вашего компьютера на WSUS.

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

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

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

Теперь можете выполнить сканирование на Microsoft Update. Как вы видите, в данном случае были найдены дополнительные обновления для Microsoft Visual C++ 2008 и Microsoft Silverlight.

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

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

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

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

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

Get-WUlist -NotCategory "Drivers" -NotTitle OneDrive -NotKBArticleID KB4533002

Install-WindowsUpdate: установка обновлений с помощью PSWindowsUpdate

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

Install-WindowsUpdate -MicrosoftUpdate -AcceptAll -AutoReboot

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

Можете сохранить историю установи обновлений в лог файл (можно использовать вместо 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). Это особенно удобно, так как позволяет администратору не заходить вручную на все сервера во время плановой установки обновлений. Следующая команда установит все доступные обновление на трех удаленных серверах:

В модуле PSWindowsUpdate 2.1 вместо командлета Invoke-WUInstall нужно использовать Invoke-WUJob. Этот командлет создает на удаленном компьютере задание планировщика, запускаемое от SYSTEM.

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

Install-WindowsUpdate -ComputerName server1 -MicrosoftUpdate -AcceptAll - IgnoreReboot -SendReport –PSWUSettings @ -Verbose

Get-WUHistory: просмотр истории установленных обновлений Windows

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

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

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

Get-WUHistory| Where-Object | Select-Object *|ft

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

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

"server1","server2" | Get-WUHistory| Where-Object | Select-Object *|ft

Remove-WindowsUpdate: Удаление обновлений

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

Remove-WindowsUpdate -KBArticleID KB4011634 -NoRestart

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

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

$HideList = "KB2538243", "KB4524570"
Get-WindowsUpdate -KBArticleID $HideList -Hide

или используйте alias:

Hide-WindowsUpdate -KBArticleID $HideList -Verbose

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

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

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

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

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

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

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

Show-WindowsUpdate -KBArticleID $HideList

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

Для просмотра обновлений и управления ими можно использовать консоль WSUS.

Просмотр обновлений

На странице обновления можно выполнить следующие действия.

Просмотр обновлений. В обзоре обновления отображаются обновления, которые были синхронизированы с источника обновлений на сервер WSUS и доступны для утверждения.

Фильтровать обновления. В представлении по умолчанию можно фильтровать обновления по состоянию утверждения и состоянию установки. Значение по умолчанию — для неутвержденных обновлений, необходимых некоторым клиентам или для которых произошел сбой установки на некоторых клиентах. Вы можете изменить это представление, изменив фильтры состояния утверждения и состояния установки, а затем нажав кнопку Обновить.

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

Выполните поиск обновлений. Можно выполнить поиск отдельного обновления или набора обновлений по названию, описанию, статье базы знаний или номеру центра Microsoft Security Response Center для обновления.

Просмотр сведений, состояния и журнала редакций для каждого обновления.

Утвердите и отклоните обновления.

Просмотр обновлений

В консоли администрирования WSUS разверните узел обновления, а затем щелкните все обновления.

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

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

Фильтрация списка обновлений, отображаемых на странице «обновления»

В консоли администрирования WSUS разверните узел обновленияи выберите пункт все обновления.

Создание нового представления обновлений на WSUS

В консоли администрирования WSUS разверните узел обновленияи выберите пункт все обновления.

На панели действия выберите пункт новое представление обновлений.

В окне Добавление представления обновлений в разделе Шаг 1. Выбор свойстввыберите свойства, необходимые для фильтрации представления обновлений.

Выберите обновления для определенной классификации, чтобы отфильтровать обновления, относящиеся к одной или нескольким классификациям обновлений.

Выберите обновления для конкретного продукта, чтобы отфильтровать обновления для одного или нескольких продуктов или семейств продуктов.

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

Выберите обновления, которые были синхронизированы в течение определенного периода времени для фильтрации обновлений, синхронизируемых в определенное время.

Выберите обновления обновления WSUS, чтобы отфильтровать обновления WSUS.

В разделе Шаг 2. изменение свойствщелкните подчеркнутые слова, чтобы выбрать нужные значения.

В разделе Шаг 3. Укажите имя, присвойте новому представлению имя.

Новое представление появится на панели древовидного представления в разделе обновления. Он будет отображаться, как стандартные представления, в центральной области при выборе.

Поиск обновления

Выберите узел обновления (или любой узел под ним).

На панели действия нажмите кнопку Поиск.

В окне поиска на вкладке обновления введите условия поиска. Можно использовать текст из полей номер статьи заголовок, Описаниеи База знаний Майкрософт (KB) . Каждый из этих элементов является свойством, указанным на вкладке сведения в свойствах обновления.

Просмотр свойств обновления

В консоли администрирования WSUS разверните узел обновленияи выберите пункт все обновления.

В списке обновлений щелкните обновление, которое требуется просмотреть.

В нижней области отобразятся различные разделы свойств:

В строке заголовка отображается заголовок обновления. например, обновление безопасности для проигрыватель Windows Media 9 (KB911565).

В разделе Состояние отображается состояние установки обновления (компьютеры, на которых он должен быть установлен, компьютеры, на которых он был установлен, а также компьютеры, на которых он был установлен или неприменим), и сведения об общей информации (KB и номер версии MSRC, Дата выпуска). и т. д.).

В разделе Описание приводится краткое описание обновления.

В разделе Дополнительные сведения отображаются следующие сведения.

Режим установки обновления (независимо от того, является ли он съемным, запрашивает перезагрузку, требует ввода данных пользователем или должен быть установлен исключительно).

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

Продукты, к которым применяется обновление

Обновления, заменяющие это обновление

Обновления, заменяемые этим обновлением

Языки, поддерживаемые обновлением

Обратите внимание, что эту процедуру можно выполнить только для одного обновления за раз. Если выбрано несколько обновлений, на панели « Свойства » будет отображаться только первое обновление в списке.

Управление обновлениями с помощью WSUS

Обновления используются для обновления или предоставления полной замены файла для программного обеспечения, установленного на компьютере. Каждое обновление, доступное на Центр обновления Майкрософт, состоит из двух компонентов:

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

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

Когда обновления синхронизируются на сервере WSUS, файлы метаданных и файлы обновлений хранятся в двух разных расположениях. Метаданные хранятся в базе данных WSUS. Файлы обновления могут храниться либо на сервере WSUS, либо на Центр обновления Майкрософт серверах в зависимости от того, как настроены параметры синхронизации. Если вы решили хранить файлы обновления на Центр обновления Майкрософт серверах, то во время синхронизации будут скачаны только метаданные. Вы утверждаете обновления с помощью консоли WSUS, а затем клиентские компьютеры получают файлы обновления непосредственно из Центр обновления Майкрософт во время установки. Дополнительные сведения о параметрах хранения обновлений см. в разделе 1,3. Выберите стратегию хранилища WSUS из шага 1. Подготовка к развертыванию WSUS в разделе Руководство по развертыванию WSUS.

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

Определите общий план управления обновлениями на основе топологии сети и пропускной способности, потребностей компании и организационной структуры.

Следует ли настраивать иерархию серверов WSUS и как должна быть структурирована иерархия.

Какие группы компьютеров следует создать и как назначать им компьютеры (на стороне сервера или на стороне клиента).

база данных, используемая для метаданных обновления (например, внутренняя база данных Windows, SQL Server).

Должны ли обновления синхронизироваться автоматически и в какое время.

Задайте параметры синхронизации, такие как источник обновления, классификация продукта и обновления, язык, параметры подключения, место хранения и расписание синхронизации.

Получайте обновления и связанные метаданные на сервере WSUS с помощью синхронизации из Центр обновления Майкрософт или вышестоящего сервера WSUS.

Утвердите или отклоните обновления. Имеется возможность разрешить пользователям устанавливать обновления (если они являются локальными администраторами на клиентских компьютерах).

Настройка автоматических утверждений. Вы также можете указать, следует ли включить автоматическое утверждение редакций для существующих обновлений или утвердить редакции вручную. Если вы решите утвердить редакции вручную, сервер WSUS продолжит использовать старую версию до тех пор, пока новая редакция не будет утверждена вручную.

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

Обновление продуктов и классификаций

Обновления, доступные на Центр обновления Майкрософт, отличаются по продуктам (или семейству продуктов) и классификации.

Продукт — это конкретный выпуск операционной системы или приложения, например Windows Server 2012. Семейство продуктов представляет собой базовую операционную систему или приложение, от которых происходят отдельные продукты. примером семейства продуктов является Microsoft Windows, из которого Windows Server 2012 является членом. Можно выбрать продукты или семейства продуктов, для которых сервер должен синхронизировать обновления. Можно указать семейство продуктов или отдельные продукты в семействе. При выборе любого продукта или семейства продуктов будут обновлены текущие и будущие версии продукта.

Классификации обновлений представляют тип обновления. для любого конкретного продукта или семейства продуктов обновления могут быть доступны в нескольких классификациях обновлений (например, Windows 7 критические обновления и обновления для системы безопасности). В следующей таблице перечислены классификации обновлений.

Классы обновлений Описание
Критические обновления Широко выпущенные исправления для конкретных проблем, устраняющих критические ошибки, не связанные с безопасностью.
Обновления определений Обновления для определений вирусов или других файлов определений.
Драйверы Программные компоненты, разработанные для поддержки нового оборудования.
пакеты дополнительных компонентов; Новые выпуски функций, которые обычно сводятся в продукты в следующем выпуске.
Обновление системы безопасности Широко выпускают исправления для конкретных продуктов, устраняя проблемы безопасности.
пакеты обновления; Совокупные наборы всех исправлений, обновлений для системы безопасности, критических обновлений и обновлений, созданных с момента выпуска продукта. Пакеты обновления могут также содержать ограниченное количество изменений или функций проекта, запрошенных клиентом.
Инструменты Служебные программы и функции, помогающие выполнить задачу или набор задач.
накопительные пакеты обновления; Накопительный набор исправлений, обновлений для системы безопасности, критических обновлений и других обновлений, Объединенных в пакет для простоты развертывания. сводный показатель обычно предназначен для определенной области, например безопасности, или конкретного компонента, например службы IIS (IIS).
Обновления Широко выпущенные исправления для конкретных проблем, устраняющих некритические ошибки, связанные с безопасностью.

Значки, используемые для обновлений в Windows Server Update Services

Обновления в службах WSUS представлены одним из следующих значков. Для просмотра этих значков необходимо включить столбец замены в консоли Update Services.

Нет значка

Обновление не имеет отношения замены с другим обновлением.

Рабочие проблемы:

Рабочие проблемы отсутствуют.

Значок замены


Это обновление заменяет другие обновления.

Рабочие проблемы:

Рабочие проблемы отсутствуют.

Значок замененного & замещающего значка


Это обновление заменено другим обновлением и заменяет другие обновления.

Рабочие проблемы:

При возможности замените эти обновления заменяемыми обновлениями.

Значок «Заменено»


Это обновление заменено другим обновлением.

Иногда требуется проверить установленные в системе обновления. Конечно, можно просмотреть журнал обновлений, однако выискивать нужное обновление в длинном списке достаточно сложно и долго. Поэтому гораздо проще воспользоваться командной строкой, которая предоставляет для этого несколько способов.

Быстрее и проще всего отыскать нужный апдейт с помощью утилиты командной строки wmic.exe. Так следующая команда выведет полный список установленных обновлений:

А так мы найдем найдем нужное:

wmic qfe list | find ″KB982018″

wmic

Get-WmiObject

PowerShell также позволяет просмотреть установленные обновления. Сделать это можно с помощью командлета Get-WmiObject, например:

Get-WmiObject -Class win32_quickfixengineering -Filter ″HotFixID=′KB982018′″ | fl HotFixID, InstalledOn, Description, Caption

Get-WmiObject

Как видите, команда несколько сложнее и требуется дополнительно отформатировать вывод, однако результат такой же, как и у утилиты wmic. Что неудивительно, так как в обоих случаях данные получаются путем обращения к WMI классу win32_quickfixengineering. Обратите внимание, что он содержит данные только об обновлениях операционной системы и ее компонентов. Получить информацию об обновлениях для других продуктов MS (Office, Exchange и т.п) таким образом не получится.

Get-SilWindowsUpdate

В Windows Server 2012 R2 имеется модуль SoftwareInventoryLogging, предназначенный для инвентаризации установленного ПО. В состав этого модуля входит командлет Get-SilWindowsUpdate, с помощью которого также можно посмотреть установленные обновления. Например:

Get-SilWindowsUpdate -ID kb3149090

Get-SolWindowsUpdate

Этот командлет также использует WMI запрос к классу MsftSil_WindowsUpdate. Get-SilWindowsUpdate очень прост и удобен в использовании, но к сожалению доступен он далеко не везде. Модуль SoftwareInventoryLogging присутствует только в серверных ОС начиная с Windows Server 2012 R2 с установленным обновлением KB3000850.

Microsoft Update Client Install History

$session = New-Object -ComObject ″Microsoft.Update.Session″
$searcher = $session.CreateUpdateSearcher()
$hystorycount = $searcher.GetTotalHistoryCount()
$searcher.QueryHistory(0,$HistoryCount) | where | fl Date,Title,Description,SupportUrl

Microsoft Update Client Install History

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

Инвентаризация программ используя Powershell во всем AD

Для сбора списка программ используя Powershell есть много методов. Это может быть win32_product, команда Get-AppxPackage и многие другие. У большинства методов есть два минуса:

  1. Они выполняются очень долго (win32_product может выполняться несколько минут);
  2. Методы возвращают не все установленные программы.

Для обхода этих проблем, в примерах ниже, будет использоваться способ используя ключ реестра. Конечной целью будет получения списка всех программ со всего AD и последующий экспорт CSV (Excel). Так же будет показан способ исключения из списка тех программ, которые являются стандартными для компании.

Навигация по посту

Получение списка программ

Ключ реестра, который содержит все программы следующий:

Список программ можно получить так:

Получение списка программ в Powershell

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

Фильтрация списка программ в Powershell

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

Команда, которая вернет только версию и отображаемое имя:

Получение свойств из списка программ в Powershell

Примеры скриптов проверяются на Windows Server 2019 и Windows 10. На серверной версии появляются пустые строки связанные с нестандартными объектами:

Форматирование списка программ в Powershell

Я решил их не включать в список программ, так как они относятся к системным программам установленными вместе с ОС. Скрипт, который исключит их, выглядит так:

Инвентаризация программ с в Powershell

Удаленное подключение к компьютерам

Так как скрипт должен подключаться к удаленным компьютерам я добавлю командлет PSRemoting (WinRM). Эта технология нуждается в предварительных настройках. В доменных сетях, при использовании DNS имен компьютеров, может все сработать и без этого. Проверить работу этой возможности с помощью следующего командлета:

Выполнение удаленных программ в Powershell

Если у вас появляются ошибки, то советую проверить, что консоль Powershell запущена от имени администратора и служба включена:

Используя только описанные методы у нас получится достаточно сложный скрипт, который будет иметь следующую логику:

Что бы избежать такого сложно читаемого кода я объединю все это в одну функцию-командлет.

Создание командлета

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

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

Создание команды возвращающая список установленных программ с Powershell

После этого мы сможем получать наш список следующими способами:

Варианты использования команды возвращающая список установленных программ с Powershell

Отмечу, что команда Get-Programs перестанет работать после завершения сессии пользователя и затем ее понадобится объявлять заново. Если вы хотите что бы они импортировались автоматически почитайте конец статьи "Как создавать команды и функции в Powershell вызывать их и передавать параметры".

Исключение программ

Исключить определенные программы мы можем по нескольким причинам. Это могут быть:

  1. Стандартные программы. Например Adobe Reader будет на большинстве компьютеров.
  2. Не несут информационной пользы. В список программ могут входить пакеты обновлений.

Я создал следующий список:

Использование знака * в названиях говорит, что в этой части строки может находится еще текст, но не обязательно.

Для исключения программ я сделал еще один командлет, который будет принимать 2 параметра:

  1. Список программ в переменной $Programs
  2. Список исключений в переменной $ExcludeList

Теперь мы можем исключать программы так:

Исключение программ из списка в Powershell

Получение списка компьютеров

Следующая команда вернет список всех компьютеров которые есть в AD:

Получение списка компьютеров из AD в Powershell

Она сработает в случаях если у вас установлен RSAT, импортирован модуль AD или вы на сервере с AD.

Следующим способом мы получим только имена компьютеров:

Получение имен компьютеров из AD в Powershell

Мы можем использовать эту команду без дополнительных параметров, но могут быть ошибки:

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

Если не учитывать особенности вашей инфраструктуры, то причины в основном 3:

  1. Компьютер выключен.
  2. Компьютер отключен как учетная запись.
  3. На указанном компьютере не настроен WinRM (PSRemoting), не открыт порт или нет нужных привилегий на такую команду.

О третьей причине мы уже говорили. Что касается первых двух мы можем их решить.

В случае если отключены учетные записи компьютеров, то отфильтровать их можно так:

Фильтрация компьютеров из AD в Powershell

Выключенные компьютеры можно проверить через команду Test-NetConnection (аналог ping):

Проверка компьютеров AD в сети с Powershell

Плюсы метода выше в том, что вы получите список компьютеров, которые оффлайн. Минусы в том, что вы не можете изменить время возвращения ответа на ICMP пакет, а оно будет длиться 3-7 секунд.

И последний пример - это использовать возможность игнорирования ошибок через -ErrorAction SilentlyContinue. Этот пример самый быстрый, но вы не получите список исключенных компьютеров в чистом виде:

Использование переменной ErrorVariable в Powershell

Экспорт данных в CSV и открытие в Excel

Команда, которая эскортирует данные, называется Export-CSV. Если вы не исключаете программы, то можете выполнить ее так:

Если вы исключаете программы, то можете выполнить ее так:

Открыв Excel и выбрав следующий пункт выберете файл в проводнике:

Импорт CSV из Powershell в Excel

В новом окне посмотреть на разделитель, который используется, и нажать "Далее":

Импорт CSV из Powershell в Excel

Выбрать разделитель (будет либо запятая или точка-запятая):

Импорт CSV из Powershell в Excel

Результат будет примерно следующим:

Получение списка программ в Powershell с использованием AD

Если выделить шапку (как в примере выше) и нажать "Фильтр", то сможете более удобно фильтровать результат.

Читайте также: