3 votes

Comment obtenir une liste complète de tous les logiciels installés via Powershell ?

J'essaie de comprendre comment afficher les numéros de version de tous les logiciels installés dans Powershell sur Windows 10. J'ai déniché un exemple mais quand je compare la liste générée à ce qui est dans Panneau de configuration > Désinstaller un programme il semble incomplet. Par exemple, Google Chrome ne figure pas dans le résultat de la requête. Avez-vous une idée de la raison ? J'ai très peu d'expérience avec Powershell, alors peut-être quelque chose d'évident ?

Get-WMIObject -Query "SELECT * FROM Win32_Product" |FT

Chrome est bien installé mais n'apparaît pas dans la sortie PS : enter image description here

0 votes

Win32_Product fournira des informations sur les applications gérées par Windows Installer. Les fournisseurs ne sont pas obligés d'utiliser Windows Installer, ils peuvent avoir leur propre programme d'installation. En outre, de nombreuses applications n'ont pas de programme d'installation. Il suffit de copier le(s) fichier(s). Ce n'est pas pour rien qu'il existe des entreprises qui proposent des produits d'audit et d'inventaire des applications.

0 votes

À quels produits en particulier pensez-vous ? Si vous connaissez une solution qui fonctionne réellement comme annoncé, j'aimerais l'essayer.

7voto

Ace Points 106

Essayez ça :

function Get-InstalledApps {
    param (
        [Parameter(ValueFromPipeline=$true)]
        [string[]]$ComputerName = $env:COMPUTERNAME,
        [string]$NameRegex = ''
    )

    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) {
                    [pscustomobject]@{
                        ComputerName = $comp
                        DisplayName = $name
                        DisplayVersion = $program.GetValue('DisplayVersion')
                        Publisher = $program.GetValue('Publisher')
                        InstallDate = $program.GetValue('InstallDate')
                        UninstallString = $program.GetValue('UninstallString')
                        Bits = $(if ($key -eq '\Wow6432Node') {'64'} else {'32'})
                        Path = $program.name
                    }
                }
            }
        }
    }
}

Utilisez : Get-InstalledApps -ComputerName $env:COMPUTERNAME

0 votes

Cela capture Chrome, ainsi qu'Adobe Acrobat. Merci !

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X