none
Как получить список установленных программ RRS feed

  • Вопрос

  • Как можно получить список установленных программ, которое отображаются только в "Программы и компоненты".

    Варианты -  Windows PowerShell

    Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Format-Table -AutoSize

    и cmd wmic product get name,version

    Не подходят, так как выдают список из 100+ программ, которые не отображаются в "Программы и компоненты". А нужен только тот список, который там отображается.

    Список нужно получить с помощью команды, т.к нужен для использования внутри инсталлятора Inno Setup


    • Изменено Velart 24 января 2020 г. 6:04
    24 января 2020 г. 6:03

Ответы

  • Нашел корень проблемы. В моём случае, я искал с++ Redistributable в реестре, которые отображаются в "Программы и компоненты". Нужно ингалятором(или тем что вы используете) анализировать строку "DisplayName", например значение будет "Microsoft Visual C++ 2005 Redistributable - x64 8.0.51011 False", False - означает что Redistributable не будет отображаться в списке "Программы и компоненты", если флаг отсутствует, соответственно - будет отображаться.

    • Помечено в качестве ответа Velart 28 января 2020 г. 6:39
    28 января 2020 г. 6:39

Все ответы

  • Попробуйте Get-WmiObject win32_product OR Get-CimInstance win32_product
    24 января 2020 г. 6:37
  • Тот же эффект, выдает 100+ программ. Как я понимаю все эти команды берут информацию из 

    ...CurrentVersion\Uninstall\*

    И соответственно выводится список деинсталяторов.

    "Программы и компоненты", а так же Ccleaner берут эту информацию в каком-то другом месте, вот такую команду я и не могу найти

    24 января 2020 г. 6:41
  • Добрый день, можно попробовать отфильтровать значения, убрав обновления и системные компоненты:

    Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName,DisplayVersion, Publisher, InstallDate,ParentKeyName,SystemComponent,'(default)'|? {!$_.SystemComponent}|?{!$_.ParentKeyName} |? {$_.'(default)'-eq $null} | Format-Table -AutoSize

    24 января 2020 г. 8:20
  • Выдает значительно меньше вариантов, их меньше чем в "Программы и компоненты",  есть ли вообще способ получить идентичный список с "Программы и компоненты", с помощью команд? 
    24 января 2020 г. 10:32
  • Вот более полный скрипт (взято отсюда), с проверкой по всем веткам реестра

    if (!([Diagnostics.Process]::GetCurrentProcess().Path -match '\\syswow64\\'))
    {
      $unistallPath = "\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"
      $unistallWow6432Path = "\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\"
      @(
      if (Test-Path "HKLM:$unistallWow6432Path" ) { Get-ChildItem "HKLM:$unistallWow6432Path"}
      if (Test-Path "HKLM:$unistallPath" ) { Get-ChildItem "HKLM:$unistallPath" }
      if (Test-Path "HKCU:$unistallWow6432Path") { Get-ChildItem "HKCU:$unistallWow6432Path"}
      if (Test-Path "HKCU:$unistallPath" ) { Get-ChildItem "HKCU:$unistallPath" }
      ) |
      ForEach-Object { Get-ItemProperty $_.PSPath } |
      Where-Object {
        $_.DisplayName -and !$_.SystemComponent -and !$_.ReleaseType -and !$_.ParentKeyName -and ($_.UninstallString -or $_.NoRemove)
      } |
      Sort-Object DisplayName |
      Select-Object DisplayName
    }
    else
    {
      "You are running 32-bit Powershell on 64-bit system. Please run 64-bit Powershell instead." | Write-Host -ForegroundColor Red
    }

    24 января 2020 г. 11:09
  • Нашел корень проблемы. В моём случае, я искал с++ Redistributable в реестре, которые отображаются в "Программы и компоненты". Нужно ингалятором(или тем что вы используете) анализировать строку "DisplayName", например значение будет "Microsoft Visual C++ 2005 Redistributable - x64 8.0.51011 False", False - означает что Redistributable не будет отображаться в списке "Программы и компоненты", если флаг отсутствует, соответственно - будет отображаться.

    • Помечено в качестве ответа Velart 28 января 2020 г. 6:39
    28 января 2020 г. 6:39