J'essaie d'utiliser Windows PowerShell 2.0 pour trouver une application installée. J'ai essayé deux méthodes, l'une utilisant WMI et l'autre utilisant le registre. Les deux méthodes sont en mesure de faire apparaître une grande liste d'applications et de composants installés, mais aucun ne semble soulever l'application qui m'intéresse.Recherche de TOUTES les applications installées avec PowerShell?
Je suis spécifiquement à la recherche de CruiseControl.NET. Il apparaît dans la liste des applications de l'applet du panneau de configuration Programmes et fonctionnalités. Je sais pertinemment qu'il est actuellement installé, puisque je viens de le désinstaller et de le réinstaller pour commencer à nouveau. Aucune des méthodes suivantes semblent fonctionner, mais (ils réussissent, mais renvoie aucun résultat):
Recherche Registre Approche
recherche dans le Registre HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
pour les clés d'application. Retourne beaucoup si je supprime le où, mais il manque un certain nombre d'applications qui apparaissent dans le panneau de configuration des programmes et des fonctionnalités de Windows.
gci "hklm:\software\microsoft\windows\currentversion\uninstall"
| foreach { gp $_.PSPath }
| select DisplayVersion,InstallDate,ModifyPath,Publisher,UninstallString,Language,DisplayName
| where { $_.DisplayName -match "^Cruise*" }
WMI approche
renvoie également beaucoup, cependant, en fonction de la documentation de l'objet Win32_Product, ils ne sont que MSI applications installées. Beaucoup d'applications manquent, je devine parce qu'elles ne sont pas MSI. Le programme d'installation CruiseControl.NET est le NSIS (NullSoft Installation System) ... comme il n'apparaît pas ici, je suppose qu'il n'utilise pas MSI du tout, mais je suis curieux de savoir s'il y a une autre façon d'utiliser WMI trouver toutes les applications installées, indépendamment du fait qu'elles aient utilisé MSI ou non. Trouver l'application via le registre ne me fait pas beaucoup de bien, vraiment. À moins qu'il ne fournisse également un moyen de trouver le programme de désinstallation des applications et les paramètres corrects pour l'invoquer, ce qui ne semble pas toujours être le cas. Je préférerais utiliser WMI pour trouver et désinstaller les applications à désinstaller, car cela me permettrait non seulement d'utiliser une seule interface de gestion pour tous mes scripts (WMI), mais d'autres pourraient facilement comprendre comment pour maintenir les scripts dans le futur puisque WMI est généralement bien documenté.
Cela ne résoudrait pas votre problème, mais votre regex ne fait pas ce que vous pensez qu'il est: "^ Cruise *" correspondrait "Cruis" ou "Cruiseeeee" (et aussi "CruiseControl.NET") mais si vous Je cherchais simplement quelque chose commençant par "Cruise", vous pouvez simplement utiliser "^ Cruise". Pour être plus explicite, vous pouvez utiliser "^ Cruise. *" Mais ce n'est pas nécessaire. – bwerks