2010-02-11 6 views
2

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 , 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é.

+0

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

Répondre

6

Eh bien, désolé de le faire à nouveau. J'avais la mauvaise habitude de répondre à mes propres questions.

De toute façon, j'ai trouvé la réponse à ma question en cherchant le registre pour "CruiseControl.NET". Il semble que les versions 64 bits de Windows stockent des informations de désinstallation à plusieurs endroits.Plus particulièrement, les informations de désinstallation semble être principalement agrégée à la clé suivante:

HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\ 

j'ai pu trouver tous les programmes sur mon système répertorié ici, y compris CruiseControl.NET. Notez que cela ne semble être le cas que sur 64bit Windows Systems.

+5

jrista, répondre à vos propres questions n'est pas une mauvaise habitude. – MagicAndi

2

La commande ci-dessous trouve CruiseControl.Net:

gci "HKLM:\software\Microsoft\windows\CurrentVersion\Uninstall" | %{ gp $_.PSPath } | where { $_.DisplayName -match "CruiseControl.NET" } 

Je ne peux pas honnêtement vous répondre au sujet si le UninstallString est toujours présent lors de la recherche du Registre de désinstallation, et je ne puis vous dire si vous trouverez toutes les applications installé sur votre machine. Je sais que here MS donne des instructions sur une désinstallation manuelle, qui utilise le UninstallString de cette entrée de registre, donc .. Je suis sûr que quelqu'un avec plus de connaissances sur le sujet commentera ..

Edit: Résultats sur un ordinateur Windows 7 Machine

PSPath   : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\software\Microsoft\windows\CurrentVersion\Uninstall\CruiseControl.NET 
PSParentPath  : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\software\Microsoft\windows\CurrentVersion\Uninstall 
PSChildName  : CruiseControl.NET 
PSProvider  : Microsoft.PowerShell.Core\Registry 
NSIS:StartMenuDir : CruiseControl.NET 
CCNetVDir   : 1 
DisplayName  : CruiseControl.NET 1.5.6804.1 
UninstallString : C:\Program Files\CruiseControl.NET\uninst.exe 
DisplayIcon  : C:\Program Files\CruiseControl.NET\Server\ccnet.exe 
DisplayVersion : 1.5.6804.1 
URLInfoAbout  : http://ccnet.thoughtworks.com/ 
Publisher   : ThoughtWorks 
+0

J'ai essayé la commande ci-dessus, mais elle ne renvoie rien non plus. J'utilise Windows 7, je ne suis pas sûr si cela joue un rôle. Pour une raison quelconque, la version de CruiseControl.NET que j'installe refuse de s'afficher ailleurs que dans le panneau de configuration Programmes et fonctionnalités. Il existe également de nombreux autres programmes, tels que VLC et Wireshark, qui n'apparaissent pas non plus dans les commandes registry ou wmi. – jrista

+0

@jrista - J'ai modifié le post ci-dessus et collé les résultats de la commande sur une machine Windows 7. Lorsque vous parcourez le registre avec regedit, voyez-vous l'entrée? – dugas

+0

Je ne le vois pas dans le registre. Ma clé de désinstallation dans le registre contient une tonne de clés guid, qui contiennent principalement des éléments Microsoft tels que Visual Studio, SQL Server, etc. Certaines choses Adobe sont également présentes. Aucun signe de CruiseControl.NET cependant, mais assez intéressant, il apparaît toujours dans les programmes/fonctionnalités cpl. Je peux le désinstaller à partir de là aussi, et cela fonctionne. Je ne suis pas sûr d'où il obtient l'info. – jrista

Questions connexes