Question
parser des données
- jojo
-
Auteur du sujet
- Hors Ligne
- Membre elite
-
Réduire
Plus d'informations
- Messages : 187
- Remerciements reçus 0
il y a 15 ans 10 mois #6600
par jojo
parser des données a été créé par jojo
Bonjour à tous les PowerShelleurs
,
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 !!
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.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 15 ans 10 mois #6601
par Laurent Dardenne
Tutoriels PowerShell
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.
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.
- jojo
-
Auteur du sujet
- Hors Ligne
- Membre elite
-
Réduire
Plus d'informations
- Messages : 187
- Remerciements reçus 0
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 
d'accord je vais regarder du côté de Group-Object
d'accord je vais regarder du côté de Group-Object
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.043 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- parser des données