Question parser des données

Plus d'informations
il y a 15 ans 10 mois #6600 par jojo
parser des données a été créé par jojo
Bonjour à tous les PowerShelleurs B) ,

j'ai un problème avec mon premier script PS, voici ce que j'essayes de faire:

compter tous les services démarrer en automatique puis parser le resultat et
compter tous les services stopper en formattant la sortie


voici une vue du resultat souhaité:

[code:1]** Auto-Running **
Alerter Avertissement
ALG Service de la passerelle de la couche Application
AppMgmt Gestion d'applications
aspnet_state ASP.NET State Service
..
** End Auto-Running **
nombre total de service auto-running: 36


** Stopped **
ClipSrv Gestionnaire de l'Album
clr_optimization_v2.0.50727_32 .NET Runtime Optimization Service v2.0.50727_X86
COMSysApp Application système COM+
CryptSvc Services de cryptographie
DcomLaunch Lanceur de processus serveur DCOM
Dhcp Client DHCP
..
** End Stopped **
nombre total de service Stopper: 25[/code:1]


et voici mon code:

[code:1]Get-Service | Format-Table -AutoSize @{
Label=\"Nom du service\";Expression={
switch($_.status) {
\"Running\" {
Begin { \"** Auto-Running **\" }
Process { $_.name,$_.DisplayName }
End { \"** End Auto-Running **\" }
}
\"Stopped\" {
Begin { \"** Stopped **\" }
Process { $_.name,$_.DisplayName }
End { \"** End Stopped**\" }
}
}
}
}
[/code:1]

merci à tous !!

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

Plus d'informations
il y a 15 ans 10 mois #6601 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:parser des données
Salut,
il y a plusieurs pb dans ton script, le premier est un piège de PS qui est que dans un switch la variable $_ représente la valeur courante du switch et pas celle du pipeline, celle-ci est donc remplacée dans la porté du switch :
[code:1]

Get-Service | Format-Table -AutoSize @{
Label=\"Nom du service\";Expression={
$Current=$_
switch($Current.status) {
\"Running\" { \"$($current.name) `t $($Current.DisplayName)\" }
\"Stopped\" {\"$($Current.name) `t $($Current.DisplayName)\" }

}
}
}
[/code:1]
Un autre concerne l'usage des blocs Begin,Process,End ceux-ci s'éxécutent dans un pipeline.
Ce qui n'est pas le cas d'un scriptblock d'un switch.
On peut faire ceci :
[code:1]
Get-Service |
Format-Table -AutoSize @{
Label=\"Nom du service\";Expression={
$Current=$_
switch($Current.status) {
\"Running\" {
&{
Begin { \"** Auto-Running **\" }
Process { \"$($Current.name) `t $($Current.DisplayName)\" }
End { \"** End Auto-Running **\" }
}
}
\"Stopped\" {
&{
Begin { \"** Stopped **\" }
Process { \"$($Current.name) `t $($Current.DisplayName)\" }
End { \"** End Stopped**\" }
}
}
}
}
}
[/code:1]
Comme tu le constateras, le résultat n'est pas fameux.
On est tenté d'ajouter un tri sur le résultat final, mais pas de chance les cmdlets Format-xx émettent des donnés d'affichage spécialisées, erreur garantie.

Enfin à lire le résultat attendu, je te conseille de regarder le cmdlet Group-Object, tu trouveras qq exemples sur le forum.

Tutoriels PowerShell

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

Plus d'informations
il y a 15 ans 10 mois #6605 par jojo
Réponse de jojo sur le sujet Re:parser des données
merci Laurent de ta réponse B)

d'accord je vais regarder du côté de Group-Object:P

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

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