Comment vérifier rapidement les versions des logiciels installés
Il y a des situations où vous devez vérifier si vous ou vos utilisateurs avez certains logiciels installés, et quelle est sa version. Vous voudrez peut-être vérifier si le logiciel est à jour ou si votre logiciel déployé par GPO a été installé pour un certain utilisateur. Je vais vous montrer plusieurs méthodes que vous pouvez utiliser pour vérifier cela avec PowerShell.
Navigation rapide:
- Vérifier localement la liste des logiciels installés
- Get-WmiObject
- Requête de registre
- Journal des événements
- Vérifier la liste des logiciels installés à distance
- Get-WmiObject
- Requête de registre
- Journal des événements
- Vérifiez si le logiciel déployé par GPO a été appliqué avec succès
Vérifiez ce qui est installé sur votre ordinateur
Pour vérifier quel logiciel est installé, vous pouvez toujours utiliser des programmes et des fonctionnalités dans votre panneau de configuration ou parcourir toutes les partitions de disque à la recherche d’une application spécifique. Vous pouvez même essayer de trouver une application dans le menu Démarrer afin de la lancer et de rechercher manuellement son numéro de version. Cependant, le problème avec ces méthodes est qu’elles sont aussi loin d’être « rapides et automatiques » qu’elles peuvent l’être. La vérification des versions logicielles installées à l’aide de PowerShell vous permet de collecter les données dont vous avez besoin beaucoup plus rapidement.
Obtenir la liste des logiciels installés avec Get-WmiObject
La première méthode est aussi simple que de coller une requête simple:
Get-WmiObject -Class Win32_Product
Vous pouvez également filtrer facilement les données pour trouver des applications spécifiques d’un seul fournisseur, ainsi que leurs versions, par exemple:
Get-WmiObject -Class Win32_Product | where vendor -eq CodeTwo | select Name, Version
Bien qu’elle soit très facile, cette méthode présente un inconvénient majeur: il faut un certain temps pour obtenir les résultats.
Registre de requêtes pour les logiciels installés
Une autre méthode pour obtenir une liste des logiciels installés consiste à interroger le registre. Le script court suivant renvoie la liste des applications avec leurs versions:
$InstalledSoftware = Get-ChildItem "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall"foreach($obj in $InstalledSoftware){write-host $obj.GetValue('DisplayName') -NoNewline; write-host " - " -NoNewline; write-host $obj.GetValue('DisplayVersion')}
Maintenant, regardez l’élément HKLM en gras ci-dessus. Cela signifie que la liste des logiciels renvoyés par le script est l’ensemble des logiciels installés sur la machine LM-localmachine. Cependant, les applications peuvent également être installées par utilisateur. Pour renvoyer une liste d’applications de l’utilisateur actuellement connecté, remplacez HKLM par HKCU (CU signifie » utilisateur actuel »):
$InstalledSoftware = Get-ChildItem "HKCU:\Software\Microsoft\Windows\CurrentVersion\Uninstall"
foreach($obj in $InstalledSoftware){write-host $obj.GetValue('DisplayName') -NoNewline; write-host " - " -NoNewline; write-host $obj.GetValue('DisplayVersion')}
Obtenir la liste des logiciels récemment installés à partir du journal des événements
Si vous souhaitez vérifier uniquement le logiciel récemment installé, vous pouvez utiliser la liste de commande suivante pour rechercher dans le journal des événements.
Get-WinEvent -ProviderName msiinstaller | where id -eq 1033 | select timecreated,message | FL *
Cette méthode de découverte du logiciel installé est la plus fiable pour les éléments récemment ajoutés car, par défaut, les journaux d’événements sont configurés pour écraser les enregistrements les plus anciens (journalisation circulaire).
En savoir plus sur l’utilisation de PowerShell pour vérifier les journaux d’événements Windows et les résultats de filtrage
Obtenez une liste des logiciels installés à distance
Chacune des méthodes mentionnées ci-dessus peut également être utilisée pour vérifier les logiciels installés sur d’autres machines du même réseau. Si vous créez une liste de tous les noms d’ordinateurs de votre réseau, vous pouvez utiliser les méthodes ci-dessous dans une boucle Foreach pour renvoyer les résultats de plus d’un seul PC distant.
pcpcname dans chaque script représente le nom de l’ordinateur distant sur lequel vous souhaitez obtenir une liste des logiciels installés et leurs versions.
Get installed softwarelist with remote Get-WmiObject command
L’applet de commande suivante est, encore une fois, la plus facile du groupe, mais peut prendre un certain temps àfinir:
Get-WmiObject Win32_Product -ComputerName $pcname | select Name,Version
oùpcpcname est le nom de l’ordinateur que vous souhaitez interroger.
Vérifiez le logiciel installéavec la requête de registre distant
Les requêtes de registre distant sont légèrement plus compliquées et nécessitent l’exécution du service de registre distant. Un exemple de requête est le suivant:
$list=@()$InstalledSoftwareKey="SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"$InstalledSoftware=::OpenRemoteBaseKey('LocalMachine',$pcname)$RegistryKey=$InstalledSoftware.OpenSubKey($InstalledSoftwareKey) $SubKeys=$RegistryKey.GetSubKeyNames()Foreach ($key in $SubKeys){$thisKey=$InstalledSoftwareKey+"\"+$key$thisSubKey=$InstalledSoftware.OpenSubKey($thisKey)$obj = New-Object PSObject$obj | Add-Member -MemberType NoteProperty -Name "ComputerName" -Value $pcname$obj | Add-Member -MemberType NoteProperty -Name "DisplayName" -Value $($thisSubKey.GetValue("DisplayName"))$obj | Add-Member -MemberType NoteProperty -Name "DisplayVersion" -Value $($thisSubKey.GetValue("DisplayVersion"))$list += $obj}$list | where { $_.DisplayName } | select ComputerName, DisplayName, DisplayVersion | FT
Vérifier la liste des logiciels récemment installés à partir du journal des événements à distance
Vérifier le journal des événements d’auser à distance nécessite l’ajout d’un seul attribut (-ComputerName) à l’applet de commande utilisée auparavant:
Get-WinEvent -ComputerName $pcname -ProviderName msiinstaller | where id -eq 1033 | select timecreated,message | FL *
Vérifiez si un logiciel déployé par GPO a été appliqué avec succès
Si vous avez appliqué une certaine version de logiciel via GPO, vous pouvez facilement vérifier si ce GPO a été appliqué avec succès à un utilisateur ou non. Tout ce dont vous avez besoin est l’outil GPResult et les noms de l’ordinateur et de l’utilisateur cibles:
gpresult /s "PCNAME" /USER "Username" /h "Target location of theHTML report"
Ensuite, recherchez votre nom de GPON et vérifiez s’il est répertorié sous GPOS appliqués ou GPOS refusés.L’exemple de GPO ci-dessous se trouve dans le groupe GPOS appliqué.