Question [resolu]Verifier si un logiciel est installé

Plus d'informations
il y a 16 ans 11 mois #4478 par Burgun
Bonjour,

je cherche à savoir si un logiciel précis est installé sur un parc de machine.

je procède de la façon suivante:

Lecture du nom de machine dans un fichier texte
Utilisation de la commande Get-WmiObject -Class Win32_Product pour lister les logiciels.

Pour le moment mon script se résume à ces quelques lignes:

[code:1]#Mise du compte utilisateur dans une variable
$user=Get-Credential
#Parcour le fichier txt pour récuperer le nom des serveur et lance la commande Get-Wmiobject
Get-Content -Path C:\Servers.txt | ForEach-Object { \"Querying $_\" ;Get-WmiObject -Class Win32_Product -ComputerName $_ -Credential $user }[/code:1]

Le soucis c'est que je récupère en sortie l'ensemble des logiciels. Mais je ne voudrais récupérer en sortie dans un fichier txt, uniquement le nom du serveur et savoir si un logiciel en question est installé ou non (avec sa version). Il faut donc que je filtre ma sortie mais je ne vois pas trop comment faire.

Quelqu'un pourrait m'aider

Merci<br><br>Message édité par: bvivi57, à: 26/03/09 18:09

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 16 ans 11 mois #4480 par Laurent Dardenne
Salut,
tu peux filtrer directement la requête WMI :
[code:1]
Get-WmiObject -Class Win32_Product -filter \&quot;name='Microsoft .NET Framework 1.1'\&quot;
[/code:1]
Pour le résultat final en texte, je te propose ceci :
[code:1]
$user=Get-Credential
$Product='Microsoft .NET Framework 1.1'

#Parcourt le fichier txt pour récuperer le nom des serveur et lance la commande Get-Wmiobject
Get-Content -Path C:\Servers.txt |`
ForEach-Object {
Write-host \&quot;Querying $_\&quot;
$Result=Get-WmiObject -Class Win32_Product -filter \&quot;name='$product'\&quot; -ComputerName $_ -Credential $user
#Renvoi Vrai si $result est renseigné
\&quot;$_ $($Result -ne $null) \&quot;
}|`
Set-Content FileFullName.Txt
#ou Set-Content \&quot;Path\$Product.Txt\&quot;
[/code:1]
Faut faire attention avec l'affichage du type [code:1]\&quot;Querying $_\&quot;, [/code:1]mieux vaut préciser ton intention avec Write-Host.
Je te laisse tester, mais le principe est là.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 16 ans 11 mois #4484 par Burgun
Merci beaucoup pour ton aide

Comme je n'ai vraiment pas de compétences dans PowerShell. J'ai essayé d'adapter ton script à ma sauce

[code:1]
#Création du fichier bilan
echo \&quot;Résultat du relevé\&quot; &gt; c:\bilan.txt
echo \&quot; \&quot; &gt;&gt; c:\bilan.txt
#Mise du compte utilisateur dans une variable
$user=Get-Credential
#Définition du programme à recherché
$Product='Symantec Endpoint Protection'
#Parcour le fichier txt pour récuperer le nom des serveur et lance la commande Get-Wmiobject
$Result=Get-Content -Path C:\Servers.txt | ForEach-Object { Write-host \&quot;Interrogation de $_\&quot; ;$Reponse=Get-WmiObject -Class Win32_Product -filter \&quot;name='$product'\&quot; -ComputerName $_ -Credential $user ;if($Reponse -eq $null){echo \&quot;$_ Endpoint pas installé\&quot; &gt;&gt; c:\bilan.txt }else {echo \&quot;$_ OK $Reponse\&quot; &gt;&gt; c:\bilan.txt} } [/code:1]

le parametre -filter m'a bien aidé!!

Tous semble fonctionner, je récupère bien ce que je veux

Merci à toi

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.080 secondes
Propulsé par Kunena