Сбор данных об установленных программах во всем AD с Powershell

Получить список установленных программ powershell. Удаленное удаление программ при помощи WMI

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

Идея основана на том факте, что информация об установленных программах находится в системном реестре по адресу:
HKLMSoftwareMicrosoftWindowsCurrentVersionUninstall

Указанная ветвь реестра перечисляет только программы, установленные «для всех пользователей», а программы «для этого пользователя» перечислены в ветви:
HKCUSoftwareMicrosoftWindowsCurrentVersionUninstall

В Windows x64 список программ сохраняется также в папке реестра:
HKLMSOFTWAREWow6432NodeMicrosoftWindowsCurrentVersionUninstall

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

Например, на VBScript:

Const HKLM = &H80000002 «HKEY_LOCAL_MACHINE strComputer = «computer» strKey = «SOFTWAREMicrosoftWindowsCurrentVersionUninstall» strEntry1a = «DisplayName» strEntry1b = «QuietDisplayName» strEntry2 = «InstallDate» strEntry3 = «VersionMajor» strEntry4 = «VersionMinor» strEntry5 = «EstimatedSize» Set objReg = GetObject(«winmgmts://» & strComputer & _ «/root/default:StdRegProv») objReg.EnumKey HKLM, strKey, arrSubkeys WScript.Echo «Installed Applications (» & strComputer & «)» & VbCrLf For Each strSubkey In arrSubkeys intRet1 = objReg.GetStringValue(HKLM, strKey & strSubkey, _ strEntry1a, strValue1) If intRet1 <> 0 Then objReg.GetStringValue HKLM, strKey & strSubkey, _ strEntry1b, strValue1 End If If strValue1 <> «» Then WScript.Echo VbCrLf & «Display Name: » & strValue1 End If objReg.GetStringValue HKLM, strKey & strSubkey, _ strEntry2, strValue2 If strValue2 <> «» Then WScript.Echo «Install Date: » & strValue2 End If objReg.GetDWORDValue HKLM, strKey & strSubkey, _ strEntry3, intValue3 objReg.GetDWORDValue HKLM, strKey & strSubkey, _ strEntry4, intValue4 If intValue3 <> «» Then WScript.Echo «Version: » & intValue3 & «.» & intValue4 End If objReg.GetDWORDValue HKLM, strKey & strSubkey, _ strEntry5, intValue5 If intValue5 <> «» Then WScript.Echo «Estimated Size: » & Round(intValue5/1024, 3) & » megabytes» End If Next

Скрипт подключается к компьютеру с сетевым именем strComputer, просматривает раздел реестра SOFTWAREMicrosoftWindowsCurrentVersionUninstall и выводит информацию о программах.

Аналогичные действия можно выполнить в командном файле CMD. Этот командный файл выдаёт список программ:

@echo off rem Этот командный файл записывает список программ, установленных на rem удалённом компьютере. rem %1 Сетевое имя компьютера в формате PCNAME (пустое значение означает rem локальный компьютер). rem Определяем путь к папке реестра set reg_key=hklmSOFTWAREMicrosoftWindowsCurrentVersionUninstall if not «%1» == «» set reg_key=\%~1%reg_key% rem Перебираем установленные программы for /F «tokens=1,2,*» %%a in («reg query «%reg_key%» /s») do ^ if «%%a» == «DisplayName» echo %%c

Для проверки того, установлена ли конкретная программа (по названию) на каком-то одном компьютере, можно использовать следующий командный файл check-app-pc.cmd

@echo off rem Этот командный файл проверяет, установлена ли заданная программа на rem удалённом компьютере. rem %1 Полное название программы или часть названия, например, KB2570791. rem %2 Сетевое имя компьютера в формате PCNAME (пустое значение означает rem локальный компьютер). rem Возвращаемые коды: rem 0 Программа установлена. rem 2 Программа не найдена. rem 87 Ошибка в параметрах. set app_name=%1 set pc_name=%2 rem Проверяем наличие в списке call apps.cmd %2 | findstr /i «%~1» if errorlevel 1 echo «%~1» program not found && exit /b 2 echo «%~1» program installed. && exit /b 0

Соответственно, команда check-app-pc.cmd KB2570791 ws_alex проверит, установлено ли обновление KB2570791 на компьютере WS_ALEX.
Теперь можно автоматизировать работу этого командного файла, добавив проверку большего количества компьютеров по списку. Для этого создаём командный файл check-app-pclist.cmd с циклом, перебирающим строчки текстового файла с сетевыми именами компьютеров.

@echo off rem %1 Полное название программы или часть названия программы. rem %2 Имя файла со списком компьютеров. rem Примечание: этот командный файл использует check-app-pclist.cmd if «%~1» == «» exit /b 87 if not exist %2 exit /b 2 for /F %%a in (%2) do (echo %%a. call check-app-pc.cmd %1 %%a)

Пример списка файлов pc.list

SERVER_DB SERVER_FILES WS_ALEX WS_RECEPTION

Теперь с помощью команды check-app-pclist.cmd KB2570791 pc.list можно проверить, установлено ли обновление KB2570791 на каждом компьютере, перечисленном в файле pc.list.

Список установленных программ по сети

В этой инструкции мы покажем несколько способов получить список установленных программ в Windows 10, Windows 8 или Windows 7 с помощью командной строки. Эта методика построения списка программ в системе может пригодиться перед переустановкой системы, когда нужно найти нежелательное ПО или при выполнении инвентаризации установленного ПО на компьютерах организации.

Рассмотрим два способа: первый подразумевает использование командной строки и утилиты wmic, второй — PowerShell.

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

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

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

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

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

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

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

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

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

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

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

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

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

Вывод списка программ с помощью утилиты WMIC

WMIC.exe — это служебная программа командной строки и оболочки PowerShell, которая используется для доступа к инструментарию управления Windows. Через WMIC можно легко получить список установленных в системе программ, она сделает это через пространство имен WMI, так сказать опросит его. Запускать описанную ниже команду вы можете как через командную строку, так и через PowerShell, я воспользуюсь последним, он выглядит позитивнее:

Вот так будет выглядеть полученный список в виде двух столбцов (Name и Version). Хочу отметить, что обращение к WMI может занимать секунд 30 и более, так что не пугайтесь, что информация не отобразилась сразу.

Вывод списка программ с помощью утилиты командной строки WMIC

Для того, чтобы экспортировать полученный список программ, вам нужно использовать вот такую конструкцию:

В результате у меня будет сформирован текстовый файл содержащий весь список программ из моей системы Windows 11.

Как получить текстовый файл со списком установленных приложений в Windows 10

Пре желании вы можете произвести выгрузку и в CSV формате, для это введите:

Тут еще будет добавлено поле Node, содержащее имя компьютера откуда была произведена выгрузка списка.

Как получить csv файл со списком установленных приложений в Windows 10

Удаленное администрирование. Установка и удаление программ

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

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

psexec ComputerName «C:Program Files (x86)Kaspersky LabKaspersky Endpoint Security 10 for Windows SP2avp.com» exit / login = KLAdmin / password = < Pass >

Отключение встроенного брандмауэра для всех профилей (только локально)

Для удаленного отключения брандмауэра должен быть доступен Сервер RPC. Доступ к которому блокирует включенный брандмауэр ?? Такая рекурсия.

Поэтому, как всегда, пойдем обходным путем:

Команда на включение брандмауэра, соответственно, будет state on

Удаление программы

Установка программы

Тихая установка с предварительным копированием программы на удаленный хост

Установка с сетевого ресурса

Административные шары, такие как «C$»,
для подобной команды не функционируют.
Необходимо создать сетевую папку вручную

Так же возможна установка по списку компьютеров используя «@», как показано в основной заметке по Psexec.

Получить список программ

Получать список установленных в системе программ лучше из реестра, нежели средствами WMI. Этот метод работает намного быстрее, чем при использовании
Get-WmiObject -Class Win32_Product

Get — ItemProperty HKLM : Software Microsoft Windows CurrentVersion Uninstall * | Select DisplayName | Sort DisplayName

Get — ItemProperty HKLM : SOFTWARE WOW6432Node Microsoft Windows CurrentVersion Uninstall * | Select DisplayName | Sort DisplayName

Из-за того что в системе могут быть установлены как 64, так и 32 битные приложения, необходимо получать значения обеих веток. Можно поместить весь список в одну переменную.

Так же читайте как в тихом режиме деинсталлировать любую программу по ее GUID

Класс Win32_Product или реестр

В инструментарии управления Windows Management Instrumentation (WMI) имеется класс Win32_Product, который позволяет регистрировать приложения, установленные на компьютере. В среде PowerShell эта возможность реализуется просто. Так, команда

Get-WmiObject Win32_Product
| select name

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

  • Он считывает имена лишь тех приложений, которые были установлены с помощью службы Windows Installer. Имена приложений, установленных иными способами, с помощью данного класса не считываются. Это значит, что использование класса Win32_Product с целью осуществления общего аудита программных средств невозможно, кроме тех случаев, когда для установки пакетов используется исключительно установщик Windows, а это практически неосуществимо для большинства сетей.
  • Считывание экземпляров класса Win32_Product выполняется весьма медленно.
  • Не всегда возможно считывание экземпляров класса Win32_Product с удаленных компьютеров. Так, когда я пытаюсь выполнить подобную процедуру в своей сети, то получаю сообщение об ошибке Generic failure.

Из-за перечисленных проблем целесообразность применения класса WMI Win32_Product снижается. Однако имеется альтернативный метод получения информации об установленных приложениях — непосредственно из реестра. Данные об установленных на компьютере приложениях содержатся в разделе реестра HKEY_LOCAL_MACHINESOFTWAREMicrosoft WindowsCurrentVersionUninstall. В каждом подразделе раздела Uninstall представлено установленное приложение, а значения в каждом подразделе отображают информацию о соответствующем приложении, как показано на экране. Таким образом, чтобы получить список приложений, можно «прочесать» раздел Uninstall и считать данные каждого подраздела, входящего в раздел Uninstall.

Экран. Один из подразделов раздела Uninstall

Провайдер реестра PowerShell дает возможность выполнять команду Get-ChildItem для получения списка имен приложений, установленных на исследуемом компьютере:

Get-ChildItem HKLM:SOFTWARE
MicrosoftWindowsCurrentVersion
Uninstall |
ForEach-object <(Get-ItemProperty
Microsoft.PowerShell.CoreRegistry::
[H1toH2]

Как работать со сценарием Get-InstalledApp.ps1

Сценарий Get-InstalledApp.ps1 считывает информацию об установленных приложениях из реестра, после чего возвращает либо список всех установленных приложений, либо список приложений, отвечающих заданным критериям. В сценарии используется следующий синтаксис командной строки:

Get-InstalledApp [-computername]
[-appID] [-appname]
[-publisher] [-version] [-matchall]

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

Параметр -appID используется для поиска приложений по их идентификаторам (application ID). Идентификатор приложения — это подраздел реестра, относящийся к разделу Uninstall. На экране идентификатор приложения выделен в левой панели. Для приложений, установленных с помощью установщика Windows, идентификактор приложения эквивалентен глобальному уникальному идентификатору (идентификатору GUID) ID продукта соответствующего приложения. Использование параметра -appID — лучший способ обнаружения конкретных приложений, установленных с помощью службы Windows Installer.

Параметр -appname применяется для поиска приложений по их отображаемому имени. Отображаемое имя — это имя приложения в том виде, в каком оно появляется в списке Add/Remove Programs или значение DisplayName в подразделе соответствующего приложения. Так, на экране выделенное приложение имеет отображаемое имя OpenOffice.org 2.4.

Параметр -publisher используется для поиска приложений по издателю. Если у вас нет точных сведений о том, кто является издателем приложения, вы можете найти их в записи Publisher подраздела реестра для этого приложения. Так, издателем выделенного приложения на экране является OpenOffice.org.

Параметр -version используется для поиска приложений по их версиям. Если вы не знаете наверняка, какова версия того или иного приложения, можете считать эти данные из параметра DisplayVersion подраздела этого приложения. К примеру, приложение, выделенное на экране, имеет версию 2.4.9286.16.

Если для файла Get-InstalledApp.ps1 указать ключ -matchall, сценарий будет выводить все соответствующие заданному критерию приложения, вместо того чтобы прекратить поиск после обнаружения первого соответствия. Так, команда

Get-InstalledApp -publisher
«Microsoft Corporation» -matchall

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

Все перечисленные ключи (-appID, -appname, -publisher и -version) — поддерживают поиск с использованием символов шаблонов; аргументы ключей нечувствительны к регистру. Так, команда

Get-InstalledApp -appname
«*office*» -matchall

выводит список всех установленных на исследуемом компьютере приложений, в именах которых есть слово office. Кроме того, для указания более детализированных критериев поиска можно указывать параметры -appID, -appname, -publisher и -version в любых сочетаниях. Так, команда

Get-InstalledApp sales01-appname
«*.NET Framework*» -version «2*»

выводит первое приложение, содержащее слова .NET Framework в отображаемом имени и имеющее версию, номер которой начинается с цифры 2. Если приложения, отвечающие указанным критериям, не обнаружены, сценарий не возвращает каких-либо значений. Для получения дополнительных сведений о шаблонных символах в среде PowerShell, выполните команду

Сценарий Get-InstalledApp.ps1 возвращает объекты, содержащие свойства ComputerName, AppID, AppName, Publisher и Version, поэтому вы можете использовать команды PowerShell и форматировать выходные данные в соответствии со своими потребностями. Так, команда

Get-InstalledApp | Select-Object AppName,
Version |
Sort-Object AppName

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

Get-InstalledApp (Get-Content
Computers.txt) |
Export-CSV Report.csv -notypeinformation

Параметр -NoTypeInformation команды Export-CSV блокирует передачу информации во выходной файл CSV. Команда

Get-InstalledApp (Get-Content
Computers.txt)
-appID » CD9E4E6262EF>» |
Select-Object ComputerName

формирует список упомянутых в файле Computers.txt компьютеров, на которых установлена библиотека .NET Framework 2.0. Если вы хотите получить упорядоченный список установленных на исследуемой системе приложений Microsoft и их версии, отсортированные по именам приложений, воспользуйтесь командой

Get-InstalledApp -publisher
«Microsoft Corporation» -matchall |
Select-Object AppName, Version |
Sort-Object AppName


).
DisplayName>

Однако в среде PowerShell 1.0 команда Get-ChildItem не обеспечивает доступ к провайдеру реестра на удаленном компьютере, поэтому для достижения цели администратору приходится задействовать StdRegProv, класс управления реестром инструментария WMI. Класс StdRegProv предусматривает возможность использования полезного набора методов, облегчающих считывание реестра вне зависимости от того, с какой системой осуществляется взаимодействие, локальной или удаленной. Дополнительную информацию о классе StdRegProv можно найти на странице StdRegProv Class на сайте MSDN (http://msdn.microsoft.com/en-us/library/aa393664.aspx).

[/H1toH2]

Как посмотреть список установленных программ с помощью командной строки

Войдите в меню «Пуск», запустите командную строку от имени администратора, а затем ведите следующую команду:

Далее нажмите на кнопку «Enter».

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

Для просмотра списка программ, введите следующую команду:

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

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

В таблице отображается имя программы и номер версии приложения.

список программ

Обратите внимание, в этой команде выбрано сохранение текстового файла «appsfile» на диске «С». Вы можете выбрать другой диск на своем компьютере для сохранения файла в формате «TXT».

Храните сгенерированные списки приложений на внешних носителях

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

Не забудьте хранить свои списки программ на внешнем или сетевом диске, чтобы иметь доступ к нему после переустановки Windows. При сбросе (вместо переустановки) Windows 10 программы удаляются, но ваши данные сохраняются. Независимо от ситуации, рекомендуется создавать резервные копии списков при резервном копировании данных.

Удаление или обновление программного обеспечения Windows

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

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

Оцените статью
Fobosworld.ru
Добавить комментарий

Adblock
detector