Функция получения установленного ПО с версиями на удаленных компьютерах. Метод писал не самостоятельно, лишь немного исправил для своих нужд.
Оригинал:
Эта функция предназначена для получения списка установленных программ на компьютерах в сети. Она принимает два параметра: $ComputerName (список имён компьютеров, по умолчанию имя текущего компьютера) и $NameRegex (регулярное выражение для фильтрации списка установленных программ).
Внутри функции создаётся пустой массив $soft_table для хранения информации об установленных программах. Затем для каждого компьютера из списка $ComputerName функция пытается получить список установленных программ, пройдя по ключам реестра. Если доступ к ключу не удалось получить, функция переходит к следующему компьютеру. Для каждой найденной программы проверяется, соответствует ли её DisplayName заданному регулярному выражению. Если да, то создаётся объект $rowtmp с информацией о программе и добавляется в массив $soft_table.
В конце функция возвращает массив $soft_table, содержащий информацию об установленных программах на всех указанных компьютерах, соответствующих заданному фильтру.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
function Get-InstalledApps { param ( [Parameter(ValueFromPipeline=$true)] [string[]]$ComputerName = $env:COMPUTERNAME, [string]$NameRegex = '' ) $soft_table = @() foreach ($comp in $ComputerName) { $keys = '','\Wow6432Node' foreach ($key in $keys) { try { $reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $comp) $apps = $reg.OpenSubKey("SOFTWARE$key\Microsoft\Windows\CurrentVersion\Uninstall").GetSubKeyNames() } catch { continue } foreach ($app in $apps) { $program = $reg.OpenSubKey("SOFTWARE$key\Microsoft\Windows\CurrentVersion\Uninstall\$app") $name = $program.GetValue('DisplayName') if ($name -and $name -match $NameRegex) { $rowtmp = "" | Select-Object ComputerName,DisplayName,DisplayVersion,Publisher,InstallDate,UninstallString,Bits,Path $rowtmp.ComputerName = $comp $rowtmp.DisplayName = $name $rowtmp.DisplayVersion = $program.GetValue('DisplayVersion') $rowtmp.Publisher = $program.GetValue('Publisher') $rowtmp.InstallDate = $program.GetValue('InstallDate') $rowtmp.UninstallString = $program.GetValue('UninstallString') $rowtmp.Bits =$(if ($key -eq '\Wow6432Node') {'64'} else {'32'}) $rowtmp.Path =$program.name $soft_table += $rowtmp } } } } return $soft_table } |