Question Lister une application

Plus d'informations
il y a 9 ans 8 mois #22271 par Damien
Lister une application a été créé par Damien
Bonjour,

Je dois lister une appli et dire si oui ou non elle est présente sur des serveurs.

J'ai essayé dans ce script de me ressortir un résultat dans le fichier Result.txt mais sans succès, il me créer ce fichier mais il est vide.

Avait vous une idée, une proposition ?

Merci d'avance

Message édité par: DrMacabre, à: 9/09/16 20:44<br><br>Message édité par: DrMacabre, à: 9/09/16 20:46

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

Plus d'informations
il y a 9 ans 8 mois #22272 par xyz
Réponse de xyz sur le sujet Re:Lister une application
DrMacabre écrit:

Avait vous une idée, une proposition ?

Oui, une. Pouvoir consulter le code :whistle:

Tutoriels PowerShell

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

Plus d'informations
il y a 9 ans 8 mois #22273 par Damien
Réponse de Damien sur le sujet Re:Lister une application
ça c'est le script qui fonctionne :

[code:1]
$servers = get-content -path E:\Pro\Tools\Listening\Servers.txt

foreach ($server in $servers)
{
echo $server
try
{ if(get-service -name cqmgserv -computername $server -ErrorAction stop)
{ write-host \&quot;le service hp insight agent est installé sur $server\&quot; }
}
catch
{
write-host \&quot;le service hp insight agent n'est pas installé sur $server\&quot;
}
}
[/code:1]

Et ça s'est un essaie, pour essayer de mettre le résultat dans le fichier résult.txt

[code:1]
$servers = get-content -path E:\Pro\Tools\Listening\Servers.txt
$Pathfile = \&quot;E:\Pro\Tools\Listening\Result.txt\&quot;
$total = @() # initialise la valeur à une table vide

foreach ($server in $servers)
{
echo $server
try
{ if(get-service -name cqmgserv -computername $server -ErrorAction stop)
{ write-host \&quot;le service hp insight agent est installé sur $server\&quot; }
}
catch
{
write-host \&quot;le service hp insight agent n'est pas installé sur $server\&quot;
}
}
set-Content -path $Pathfile -Value $total # Modifie et ré-écrie le contenu
[/code:1]ça y ai je l'ai mis, dsl

Message édité par: DrMacabre, à: 9/09/16 20:46<br><br>Message édité par: DrMacabre, à: 9/09/16 21:18

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

Plus d'informations
il y a 9 ans 8 mois #22274 par xyz
Réponse de xyz sur le sujet Re:Lister une application
Ton script doit émettre les données vers le pipeline, là il les envoie vers l'écran.
Utilise Write-Output au lieu de Write-Host.

Ensuite le Set-Content purrait être rattaché, via le caractère |, à ton traitement (le foreach), soit le foreach doit récupérer ses données, les appels à write-output, dans la variable $Total.
Ainsi ton appel à Set-Content fonctionnera.

Tutoriels PowerShell

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

Plus d'informations
il y a 9 ans 8 mois #22275 par Damien
Réponse de Damien sur le sujet Re:Lister une application
[code:1]
$servers = get-content -path C:\Servers.txt
$Pathfile = \&quot;C:\Result.txt\&quot;
$total = @() # initialise la valeur à une table vide

foreach ($server in $servers | set-Content -path $Pathfile -Value $total)# le Set-content Modifie et ré-écrie le contenu
{
echo $server
try
{ if(get-service -name cqmgserv -computername $server -ErrorAction stop)
{ write-output \&quot;le service hp insight agent est installé sur $server\&quot; }
}
catch
{
write-output \&quot;le service hp insight agent n'est pas installé sur $server\&quot;
}
}

[/code:1]

J'ai essayé de faire ce que tu as dit, mais j'ai une erreur.

En même temps j'ai pas très bien compris :

\&quot;Ensuite le Set-Content pourrait être rattaché, via le caractère |, à ton traitement (le foreach), soit le foreach doit récupérer ses données, les appels à write-output, dans la variable $Total.\&quot;

En sortie je souhaiterai que dans le fichier Result.txt ou même dans un CSV ça serait mieux :) . Ca me dise le service hp insight.... (n')est (pas) installé sur tel serveur. Ligne suivante : le serveur.... (n')est (pas) insatllé sur tel serveur.

Merci de ton aide

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

Plus d'informations
il y a 9 ans 8 mois #22276 par xyz
Réponse de xyz sur le sujet Re:Lister une application
DrMacabre écrit:

En même temps j'ai pas très bien compris :

:P, c'était pour que tu creuses un peu de ton côté.
En même temps je t'ai dit une ânerie par rapport à ton code car l'instruction foreach ne peut être utilisée directement avec le pipeline.
Il faut utiliser le cmdlet Foreach-Object ou adapter le code :
[code:1]
# 2 éléments.
$Message=@('OK','Erreur')

$(Foreach ($I in 1..6){
#Booléen
$isPair=($i%2) -eq 0
#Un booléen a 2 valeurs ...
Write-output \&quot;Serveur $i = $($message[$isPair])\&quot;
})|Set-Content c:\temp\Test.txt
type c:\temp\Test.txt
[/code:1]
Cela fonctionne en groupant l'instruction avec $(), mais ce n'est pas terrible comme écriture :-/
Avec le Foreach-Object :
[code:1]
get-content -path E:\Pro\Tools\Listening\Servers.txt|
foreach-Object {
$Serveur=$_
echo $server
try
{ if(get-service -name cqmgserv -computername $server -ErrorAction stop)
{ write-Output \&quot;le service hp insight agent est installé sur $server\&quot; }
}
catch
{
write-Output \&quot;le service hp insight agent n'est pas installé sur $server\&quot;
}
}|Set-Content c:\temp\Test2.txt
type c:\temp\Test2.txt
[/code:1]
Construction classique.
Sinon utiliser la variable intermédiaire $Total:
[code:1]
$servers = get-content -path E:\Pro\Tools\Listening\Servers.txt
$Pathfile = \&quot;E:\Pro\Tools\Listening\Result.txt\&quot;

$Total=foreach ($server in $servers)
{
echo $server
try
{ if(get-service -name cqmgserv -computername $server -ErrorAction stop)
{ write-output \&quot;le service hp insight agent est installé sur $server\&quot; }
}
catch
{
write-output \&quot;le service hp insight agent n'est pas installé sur $server\&quot;
}
}
set-Content -path $Pathfile -Value $total
type $Pathfile
[/code:1]
Pour le csv, mieux vaut y insérer uniquement le nom du serveur, le nom du service et le status du service, ensuite créer une fonction pour le formatage/affichage.
Ainsi tu peux filtrer la liste complète sur le status :
[code:1]
$servers=1..4
foreach ($server in $servers)
{
echo \&quot;Serveur : $server\&quot;
try
{ if(get-service -name cqmgserv -computername $server -ErrorAction stop)
{ write-output (New-Object PSObject -Property @{Server=$Server;ServiceName='cqmgserv';Installé=$True})}
}
catch
{
write-output (New-Object PSObject -Property @{Server=$Server;ServiceName='cqmgserv';Installé=$false})
}
}
[/code:1]

Tutoriels PowerShell

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

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