Поиск по сайту:

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


Если вы ИТ-администратор, велика вероятность, что вам приходилось устанавливать программное обеспечение для других. В наши дни управление конечными точками — это большой бизнес, и обслуживание программного обеспечения на сотнях или тысячах компьютеров — обычное дело в крупных организациях. Однако большой бизнес обычно означает большие деньги.

Что делать, если вы работаете в организации с небольшим бюджетом или вообще без него? Может быть, вы сами или кто-то из вашей команды научился использовать PowerShell для автоматизации различных задач? В этом случае использование PowerShell для одновременного управления программным обеспечением на многих конечных точках может оказаться полезным.

Язык сценариев PowerShell — это мощный гибкий язык, который, похоже, справляется практически со всем в среде Windows. Работать с программным обеспечением на удаленных компьютерах проще простого!

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

Где регистрируется программное обеспечение

Термин «программное обеспечение» является расплывчатым термином, особенно в Windows. Когда пакет программного обеспечения установлен, разработчик программного обеспечения полностью определяет, какие изменения происходят на компьютере пользователя. Установщики программного обеспечения копируют файлы, создают разделы реестра, добавляют экземпляры WMI и т. д. Ключом к созданию точного отчета об инвентаризации программного обеспечения, независимо от метода, является понимание того, на что следует обращать внимание.

Хотя установленное программное обеспечение зарегистрировано в WMI, более надежный способ найти эту информацию — использовать реестр.

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

  • HKEY_LOCAL_MACHINE(32-битный путь)
  • HKEY_LOCAL_MACHINE6432Node(64-битный путь)
  • HKEY_CURRENT_USER(для каждого профиля пользователя)

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

Требования к удаленному ПК

Чтобы использовать код, описанный в этой статье, я предполагаю, что на удаленных компьютерах включено и доступно PowerShell Remoting. Вы можете протестировать PowerShell Remoting, выполнив простую команду, например Invoke-Command -ComputerName REMOTEPCNAME -ScriptBlock{1}. Если это не удастся, остальная информация, описанная в этой статье, также не будет работать.

Использование модуля сообщества PSSoftware

Чтобы предотвратить воссоздание колеса и создание собственного инструмента PowerShell, давайте воспользуемся существующим. Некоторое время назад я создал модуль PowerShell под названием PSSoftware, который хорошо решает эту проблему.

Сначала в административной консоли PowerShell загрузите и установите модуль PSSoftware PowerShell из коллекции PowerShell, запустив Install-Module PSSoftware.

После установки модуля проверьте доступные вам команды, запустив Get-Command -Module PSSoftware -Noun Software. Вы увидите несколько команд, таких как Get-InstalledSoftware, Install-Software и Remove-Software. Эти команды являются основными функциями для управления программным обеспечением. В этой статье я сосредоточусь на функции Get-InstalledSoftware.

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

PS51> Get-InstalledSoftware

ModifyPath          : MsiExec.exe /I{4CF4DB38-0692-4A5B-BCE8-1667C51E8416}
VersionMajor        : 14
Version             : 14.0.500.272
sEstimatedSize2     : 732
URLInfoAbout        :
NoRepair            : 1
InstallSource       : C:ProgramDataPackage Cache{4CF4DB38-0692-4A5B-BCE8-1667C51E8416}v14.0.500.272x64
Contact             :
Size                :
InstallLocation     :
VersionMinor        : 0
SystemComponent     : 1
EstimatedSize       : 1464
URLUpdateInfo       :
InstallDate         : 20170716
Comments            :
WindowsInstaller    : 1
HelpLink            : https://go.microsoft.com/fwlink/?LinkId=154582
UninstallString     : MsiExec.exe /I{4CF4DB38-0692-4A5B-BCE8-1667C51E8416}
GUID                : {4CF4DB38-0692-4A5B-BCE8-1667C51E8416}
HelpTelephone       :
Readme              : Placeholder for ARP readme in case of no UI
Publisher           : Microsoft Corporation
Language            : 1033
Name                : SQL Server vNext CTP2.0 XEvent
AuthorizedCDFPrefix :
PSComputerName      : MACWINVM
RunspaceId          : da83572b-150b-43b6-923a-14e516a77ba3
--snip--

Вы можете ограничить вывод только заголовком и версией с помощью командлета Select-Object.

PS51> Get-InstalledSoftware | Select-Object -Property Name,Version

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

Возможно, вы предпочитаете видеть не все установленное программное обеспечение, а только программное обеспечение, соответствующее определенному названию. Вы можете отфильтровать эту информацию с помощью командлета Where-Object. В следующем примере выполняется поиск всего программного обеспечения, которое начинается с SQL на удаленном компьютере.

PS51> Get-InstalledSoftware | Where-Object {$_.Name -like 'SQL*'} | Select-Object -Property Name,Version

Краткое содержание

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

Использование бесплатных модулей PowerShell от сообщества — отличный способ недорого создавать отчеты об изобретателях программного обеспечения!