J'écris un script PowerShell qui installera certaines dépendances pour mon webApp. Dans mon script, je rencontre un problème récurrent de la vérification si une application particulière est installée. Il semble qu'il existe un moyen unique de vérifier si une application existe pour chaque application (c.-à-d. En vérifiant l'existant de ce dossier ou ce fichier sur C :). N'y a-t-il pas moyen de vérifier si une application est installée en interrogeant une liste d'applications installées? p>
4 Réponses :
Avez votre script Scan:
hkey_local_machine \ logiciel \ Microsoft \ Windows \ CurrentVersion \ Désinstallation Code> Li>
ul> xxx pré> p> Voici le code que j'utilise parfois (pas trop souvent, alors ...). Voir les commentaires d'aide pour plus de détails.
function Get-Uninstall
{
# paths: x86 and x64 registry keys are different
if ([IntPtr]::Size -eq 4) {
$path = 'HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*'
}
else {
$path = @(
'HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*'
'HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*'
)
}
# get all data
Get-ItemProperty $path |
# use only with name and unistall information
.{process{ if ($_.DisplayName -and $_.UninstallString) { $_ } }} |
# select more or less common subset of properties
Select-Object DisplayName, Publisher, InstallDate, DisplayVersion, HelpLink, UninstallString |
# and finally sort by name
Sort-Object DisplayName
}
Get-Uninstall
Pour obtenir une liste des applications installées Essayez:
$r = Get-WmiObject Win32_Product | Where {$_.Name -match 'Microsoft Web Deploy' }
if ($r -ne $null) { ... }
Sachez que Get-WMIObject Win32_Product peut modifier le système cible s'il trouve des erreurs dans votre base de données d'installateurs. C'est simple et une fonction vraiment utile. Mais si vous utilisez cela pour autre chose que de détecter simplement des applications installées, soyez prêt à faire plus de travail.
Bien que cela fonctionne et est agréable et propre, c'est aussi un peu lent - il faut environ 5 secondes sur ma machine pour revenir avec la réponse.
Vous pouvez utiliser test-chemin code> pour voir si le MSI est installé en examinant la clé de désinstallation correspondante dans le registre. if (Test-Path 'HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\{9BCA2118-F753-4A1E-BCF3-5A820729965C}') {
Write-Output 'IIS URL Rewrite Module 2 is already installed.'
} else {
Write-Output 'IIS URL Rewrite Module 2 is not yet installed.'
}
Voir cette réponse .