Question
Get-counter et les variables
- Nicolas Lang
- Auteur du sujet
- Hors Ligne
- Membre junior
-
Réduire
Plus d'informations
- Messages : 31
- Remerciements reçus 0
il y a 13 ans 10 mois #12303
par Nicolas Lang
Get-counter et les variables a été créé par Nicolas Lang
Bonjour / bonsoir,
Je rencontre un problème sur un petit outil de monitoring que je suis en train de coder \"pour le fun\".
Je vous explique ou j'en suis ...
Je récupère les différents compteurs disponibles dans la liste \"get-counter -listset *\" que j'exporte dans un fichier csv mis en forme afin d'avoir un compteur par ligne.
Ensuite, je peux \"choisir\" via un fichier de configuration quels compteurs je décide de surveiller et je rassemble les noms de compteurs en rajoutant des guillemets et des lignes pour arriver à un résultat comme celui ci :
[code:1]\"\Disque logique(*)\Mégaoctets libres\",\"\Synchronisation(*)\Acquisitions exclusives récursives de ressources d’exécution de AcqShrdWaitForExcl/seconde\",[/code:1]
Ainsi, je peux rajouter cela dans un joli \"get-counter -counter <compteurs selectionnés>\" et tout est censé aller bien dans le meilleur des mondes...
Mais bien sur, cela serait trop simple, et c'est la que je me frappe la tête contre un mur...
Pour bien expliquer comment cela fonctionne, la mise en forme se fait en 3 temps :
1) je récupère les données du csv pour ne conserver que la partie que le counter peut gérer
2) je concatène le tout en ajoutant un \" au début et un \" à la fin de chaque compteur tout en ajoutant une virgule
3) je supprime la dernière virgule
Je me retrouve donc avec une erreur comme celle ci
[code:1]Get-Counter : Le chemin d’accès du compteur spécifié n’a pas pu être interprété.
Au niveau de monitoring.ps1 : 42 Caractère : 12
+ Get-Counter <<<< -Counter $compt
+ CategoryInfo : InvalidResult: (:«») [Get-Counter], Exception
+ FullyQualifiedErrorId : CounterApiError,Microsoft.PowerShell.Commands.GetCounterCommand[/code:1]
Le seul problème, c'est que quand j'analyse la variable $compt , elle comprends les compteurs selectionnés et correctement mis en forme...
Pire encore! si je prends juste la valeur de ma variable, que je créé un nouveau script avec par exemple
[code:1]$compt = \"\Disque logique(*)\Mégaoctets libres\",\"\Synchronisation(*)\Acquisitions exclusives récursives de ressources d’exécution de AcqShrdWaitForExcl/seconde\"
Get-Counter -Counter $compt[/code:1]
Ca fonctionne! J'ai bien vérifié, ma variable $compt est te type system.string
Bref, je n'arrive plus à comprendre ce qui ne passe pas dans ce script et pourquoi ce get-counter refuse ma variable, alors que la valeur de cette variable est acceptée...
Des idées?
Je rencontre un problème sur un petit outil de monitoring que je suis en train de coder \"pour le fun\".
Je vous explique ou j'en suis ...
Je récupère les différents compteurs disponibles dans la liste \"get-counter -listset *\" que j'exporte dans un fichier csv mis en forme afin d'avoir un compteur par ligne.
Ensuite, je peux \"choisir\" via un fichier de configuration quels compteurs je décide de surveiller et je rassemble les noms de compteurs en rajoutant des guillemets et des lignes pour arriver à un résultat comme celui ci :
[code:1]\"\Disque logique(*)\Mégaoctets libres\",\"\Synchronisation(*)\Acquisitions exclusives récursives de ressources d’exécution de AcqShrdWaitForExcl/seconde\",[/code:1]
Ainsi, je peux rajouter cela dans un joli \"get-counter -counter <compteurs selectionnés>\" et tout est censé aller bien dans le meilleur des mondes...
Mais bien sur, cela serait trop simple, et c'est la que je me frappe la tête contre un mur...
Pour bien expliquer comment cela fonctionne, la mise en forme se fait en 3 temps :
1) je récupère les données du csv pour ne conserver que la partie que le counter peut gérer
2) je concatène le tout en ajoutant un \" au début et un \" à la fin de chaque compteur tout en ajoutant une virgule
3) je supprime la dernière virgule
Je me retrouve donc avec une erreur comme celle ci
[code:1]Get-Counter : Le chemin d’accès du compteur spécifié n’a pas pu être interprété.
Au niveau de monitoring.ps1 : 42 Caractère : 12
+ Get-Counter <<<< -Counter $compt
+ CategoryInfo : InvalidResult: (:«») [Get-Counter], Exception
+ FullyQualifiedErrorId : CounterApiError,Microsoft.PowerShell.Commands.GetCounterCommand[/code:1]
Le seul problème, c'est que quand j'analyse la variable $compt , elle comprends les compteurs selectionnés et correctement mis en forme...
Pire encore! si je prends juste la valeur de ma variable, que je créé un nouveau script avec par exemple
[code:1]$compt = \"\Disque logique(*)\Mégaoctets libres\",\"\Synchronisation(*)\Acquisitions exclusives récursives de ressources d’exécution de AcqShrdWaitForExcl/seconde\"
Get-Counter -Counter $compt[/code:1]
Ca fonctionne! J'ai bien vérifié, ma variable $compt est te type system.string
Bref, je n'arrive plus à comprendre ce qui ne passe pas dans ce script et pourquoi ce get-counter refuse ma variable, alors que la valeur de cette variable est acceptée...
Des idées?
Connexion ou Créer un compte pour participer à la conversation.
- Matthew BETTON
- Hors Ligne
- Membre platinium
-
Réduire
Plus d'informations
- Messages : 968
- Remerciements reçus 0
il y a 13 ans 10 mois #12304
par Matthew BETTON
Réponse de Matthew BETTON sur le sujet Re:Get-counter et les variables
Bonsoir,
Donc, si je comprends bien
[code:1]$compt = \"\Disque logique(*)\Mégaoctets libres\",\"\Synchronisation(*)\Acquisitions exclusives récursives de ressources d’exécution de
AcqShrdWaitForExcl/seconde\"
Get-Counter -Counter $compt[/code:1]
fonctionne (jusqu'ici tout va bien, cela me paraît tout à fait normal !
)
Peux tu poster ton exemple de code qui te permet de créer le contenu de la variable $compt ? (notamment les points 1, 2 et 3).
@ +
Matthew<br><br>Message édité par: Matthew BETTON, à: 2/07/12 21:21
Donc, si je comprends bien
[code:1]$compt = \"\Disque logique(*)\Mégaoctets libres\",\"\Synchronisation(*)\Acquisitions exclusives récursives de ressources d’exécution de
AcqShrdWaitForExcl/seconde\"
Get-Counter -Counter $compt[/code:1]
fonctionne (jusqu'ici tout va bien, cela me paraît tout à fait normal !
Peux tu poster ton exemple de code qui te permet de créer le contenu de la variable $compt ? (notamment les points 1, 2 et 3).
@ +
Matthew<br><br>Message édité par: Matthew BETTON, à: 2/07/12 21:21
Connexion ou Créer un compte pour participer à la conversation.
- Nicolas Lang
- Auteur du sujet
- Hors Ligne
- Membre junior
-
Réduire
Plus d'informations
- Messages : 31
- Remerciements reçus 0
il y a 13 ans 10 mois #12305
par Nicolas Lang
Réponse de Nicolas Lang sur le sujet Re:Get-counter et les variables
C'est tout à fait ça Matthew!
Voila mon code expliqué ... désolé si ca parait \"sale\" ou \"codé à l'envers\" mais bon je manque cruellement d'expérience sur la programmation pour me rendre compte de ça (mais je suis ouvert aux critiques -constructives, cela va de soi-)
[code:1]$check = (Get-Content .\configuration.ini | Where-Object {$_ -match \"compteurs=\"}).split(\"=\"«»)
$check = $check[-1].split(\";\"«»)[/code:1]
Cette partie récupère les compteurs dans le fichier configuration.ini, récupère la partie après le \"=\", puis envoie dans la variable $check tous les numéros de compteurs. A ce point, ma variable $check est quelque chose comme {772,39}
[code:1]
$d=\"\"
$c=\"\"
foreach ($b in $check){$c = (Get-Content .\compteurs.csv | Where-Object {$_ -like ($b+\";*\"«»)})
$d += '\"'+($c.split(\";\"«»)[-1])+'\",'}
[/code:1]
A partir des numéros des compteurs, le script va chercher dans le fichier csv les informations correspondantes, sépare au point virgule et ajoute un guillemet avant et un après, ainsi qu'une virgule après chaque compteur.
[code:1]$compt = $d.trimend(\",\"«»)[/code:1]
Vire la dernière virgule
[code:1]Get-Counter -Counter $compt[/code:1]
Et ça ... bah ça sert pour l'instant à afficher des messages d'erreur
Voila mon code expliqué ... désolé si ca parait \"sale\" ou \"codé à l'envers\" mais bon je manque cruellement d'expérience sur la programmation pour me rendre compte de ça (mais je suis ouvert aux critiques -constructives, cela va de soi-)
[code:1]$check = (Get-Content .\configuration.ini | Where-Object {$_ -match \"compteurs=\"}).split(\"=\"«»)
$check = $check[-1].split(\";\"«»)[/code:1]
Cette partie récupère les compteurs dans le fichier configuration.ini, récupère la partie après le \"=\", puis envoie dans la variable $check tous les numéros de compteurs. A ce point, ma variable $check est quelque chose comme {772,39}
[code:1]
$d=\"\"
$c=\"\"
foreach ($b in $check){$c = (Get-Content .\compteurs.csv | Where-Object {$_ -like ($b+\";*\"«»)})
$d += '\"'+($c.split(\";\"«»)[-1])+'\",'}
[/code:1]
A partir des numéros des compteurs, le script va chercher dans le fichier csv les informations correspondantes, sépare au point virgule et ajoute un guillemet avant et un après, ainsi qu'une virgule après chaque compteur.
[code:1]$compt = $d.trimend(\",\"«»)[/code:1]
Vire la dernière virgule
[code:1]Get-Counter -Counter $compt[/code:1]
Et ça ... bah ça sert pour l'instant à afficher des messages d'erreur
Connexion ou Créer un compte pour participer à la conversation.
- Matthew BETTON
- Hors Ligne
- Membre platinium
-
Réduire
Plus d'informations
- Messages : 968
- Remerciements reçus 0
il y a 13 ans 10 mois #12306
par Matthew BETTON
Réponse de Matthew BETTON sur le sujet Re:Get-counter et les variables
Ok ... Ce n'est pas \"sale\", mais je trouve cela compliqué (la fatigue aidant
)
Peux tu également poster le contenu de 'configuration.ini' et 'compteurs.csv' ?
Peux tu également poster le contenu de 'configuration.ini' et 'compteurs.csv' ?
Et ça ... bah ça sert pour l'instant à afficher des messages d'erreur
Connexion ou Créer un compte pour participer à la conversation.
- Nicolas Lang
- Auteur du sujet
- Hors Ligne
- Membre junior
-
Réduire
Plus d'informations
- Messages : 31
- Remerciements reçus 0
il y a 13 ans 10 mois #12307
par Nicolas Lang
Réponse de Nicolas Lang sur le sujet Re:Get-counter et les variables
Dans le fichier CSV, voici un exemple
[code:1]1;Compteurs des services de base de module de plateforme sécurisée;\Compteurs des services de base de module de plateforme sécurisée\Ressources actuelles
2;Compteurs des services de base de module de plateforme sécurisée;\Compteurs des services de base de module de plateforme sécurisée\Contextes actuels
3;Statistiques des quotas WSMan;\Statistiques des quotas WSMan(*)\Utilisateurs actifs
4;Statistiques des quotas WSMan;\Statistiques des quotas WSMan(*)\Opérations actives
5;Statistiques des quotas WSMan;\Statistiques des quotas WSMan(*)\Shells actifs
6;Statistiques des quotas WSMan;\Statistiques des quotas WSMan(*)\Violations de quota système/seconde
7;Statistiques des quotas WSMan;\Statistiques des quotas WSMan(*)\Violations de quota d’utilisateur/seconde
8;Statistiques des quotas WSMan;\Statistiques des quotas WSMan(*)\Nombre total de demandes/seconde
9;BranchCache;\BranchCache\Cache hébergé : taille de la file d’attente des offres de segments
10;BranchCache;\BranchCache\Découverte : découvertes réussies
11;BranchCache;\BranchCache\Récupération : débit moyen pour la filiale
12;BranchCache;\BranchCache\Cache hébergé : offres de segments de fichiers effectuées
13;BranchCache;\BranchCache\Cache local : segments de fichiers partiels du cache
14;BranchCache;\BranchCache\Cache local : segments de fichiers complets du cache
15;BranchCache;\BranchCache\Découverte : tentatives de découverte
16;BranchCache;\BranchCache\AUTRE : octets du serveur
17;BranchCache;\BranchCache\AUTRE : octets du cache
18;BranchCache;\BranchCache\WINHTTP : octets du serveur
19;BranchCache;\BranchCache\WINHTTP : octets du cache
20;BranchCache;\BranchCache\WININET : octets du serveur
21;BranchCache;\BranchCache\WININET : octets du cache
22;BranchCache;\BranchCache\BITS : octets du serveur
23;BranchCache;\BranchCache\BITS : octets du cache
24;BranchCache;\BranchCache\SMB : octets du serveur
25;BranchCache;\BranchCache\SMB : octets du cache
26;BranchCache;\BranchCache\Découverte : temps de découverte moyen pondéré
27;BranchCache;\BranchCache\Récupération : octets traités
28;BranchCache;\BranchCache\Récupération : octets du cache
29;BranchCache;\BranchCache\Récupération : octets du serveur
30;Synchronisation;\Synchronisation(*)\Boosting des propriétaires partagés de ressources d’exécution/seconde
31;Synchronisation;\Synchronisation(*)\Boosting du propriétaire exclusif de ressources d’exécution/seconde
32;Synchronisation;\Synchronisation(*)\Définition de pointeurs d’un propriétaire partagé de ressources d’exécution (propriétaire existant)/seconde
33;Synchronisation;\Synchronisation(*)\Définition de pointeurs d’un propriétaire partagé de ressources d’exécution (nouveau propriétaire)/seconde
34;Synchronisation;\Synchronisation(*)\Définition de pointeurs d’un propriétaire exclusif de ressources d’exécution/seconde
35;Synchronisation;\Synchronisation(*)\Non-attentes de ressources d’exécution de AcqShrdWaitForExcl/seconde
36;Synchronisation;\Synchronisation(*)\Contention de ressources d’exécution de AcqShrdWaitForExcl/seconde
37;Synchronisation;\Synchronisation(*)\Acquisitions partagées récursives de ressources d’exécution de AcqShrdWaitForExcl/seconde
38;Synchronisation;\Synchronisation(*)\Acquisitions de ressources d’exécution de AcqShrdWaitForExcl/seconde
39;Synchronisation;\Synchronisation(*)\Acquisitions exclusives récursives de ressources d’exécution de AcqShrdWaitForExcl/seconde
40;Synchronisation;\Synchronisation(*)\Tentatives sur des ressources d’exécution de AcqShrdWaitForExcl/seconde
[/code:1]
Il fait 1500 lignes donc on va rester sur un apercu ...
et pour le fichier de configuration il ne comporte à l'heure actuelle que cela
[code:1]
exports=C:\Users\test\Scripts\exports
compteurs=772;39[/code:1]
C'est grave docteur?
<br><br>Message édité par: Darum, à: 2/07/12 21:51
[code:1]1;Compteurs des services de base de module de plateforme sécurisée;\Compteurs des services de base de module de plateforme sécurisée\Ressources actuelles
2;Compteurs des services de base de module de plateforme sécurisée;\Compteurs des services de base de module de plateforme sécurisée\Contextes actuels
3;Statistiques des quotas WSMan;\Statistiques des quotas WSMan(*)\Utilisateurs actifs
4;Statistiques des quotas WSMan;\Statistiques des quotas WSMan(*)\Opérations actives
5;Statistiques des quotas WSMan;\Statistiques des quotas WSMan(*)\Shells actifs
6;Statistiques des quotas WSMan;\Statistiques des quotas WSMan(*)\Violations de quota système/seconde
7;Statistiques des quotas WSMan;\Statistiques des quotas WSMan(*)\Violations de quota d’utilisateur/seconde
8;Statistiques des quotas WSMan;\Statistiques des quotas WSMan(*)\Nombre total de demandes/seconde
9;BranchCache;\BranchCache\Cache hébergé : taille de la file d’attente des offres de segments
10;BranchCache;\BranchCache\Découverte : découvertes réussies
11;BranchCache;\BranchCache\Récupération : débit moyen pour la filiale
12;BranchCache;\BranchCache\Cache hébergé : offres de segments de fichiers effectuées
13;BranchCache;\BranchCache\Cache local : segments de fichiers partiels du cache
14;BranchCache;\BranchCache\Cache local : segments de fichiers complets du cache
15;BranchCache;\BranchCache\Découverte : tentatives de découverte
16;BranchCache;\BranchCache\AUTRE : octets du serveur
17;BranchCache;\BranchCache\AUTRE : octets du cache
18;BranchCache;\BranchCache\WINHTTP : octets du serveur
19;BranchCache;\BranchCache\WINHTTP : octets du cache
20;BranchCache;\BranchCache\WININET : octets du serveur
21;BranchCache;\BranchCache\WININET : octets du cache
22;BranchCache;\BranchCache\BITS : octets du serveur
23;BranchCache;\BranchCache\BITS : octets du cache
24;BranchCache;\BranchCache\SMB : octets du serveur
25;BranchCache;\BranchCache\SMB : octets du cache
26;BranchCache;\BranchCache\Découverte : temps de découverte moyen pondéré
27;BranchCache;\BranchCache\Récupération : octets traités
28;BranchCache;\BranchCache\Récupération : octets du cache
29;BranchCache;\BranchCache\Récupération : octets du serveur
30;Synchronisation;\Synchronisation(*)\Boosting des propriétaires partagés de ressources d’exécution/seconde
31;Synchronisation;\Synchronisation(*)\Boosting du propriétaire exclusif de ressources d’exécution/seconde
32;Synchronisation;\Synchronisation(*)\Définition de pointeurs d’un propriétaire partagé de ressources d’exécution (propriétaire existant)/seconde
33;Synchronisation;\Synchronisation(*)\Définition de pointeurs d’un propriétaire partagé de ressources d’exécution (nouveau propriétaire)/seconde
34;Synchronisation;\Synchronisation(*)\Définition de pointeurs d’un propriétaire exclusif de ressources d’exécution/seconde
35;Synchronisation;\Synchronisation(*)\Non-attentes de ressources d’exécution de AcqShrdWaitForExcl/seconde
36;Synchronisation;\Synchronisation(*)\Contention de ressources d’exécution de AcqShrdWaitForExcl/seconde
37;Synchronisation;\Synchronisation(*)\Acquisitions partagées récursives de ressources d’exécution de AcqShrdWaitForExcl/seconde
38;Synchronisation;\Synchronisation(*)\Acquisitions de ressources d’exécution de AcqShrdWaitForExcl/seconde
39;Synchronisation;\Synchronisation(*)\Acquisitions exclusives récursives de ressources d’exécution de AcqShrdWaitForExcl/seconde
40;Synchronisation;\Synchronisation(*)\Tentatives sur des ressources d’exécution de AcqShrdWaitForExcl/seconde
[/code:1]
Il fait 1500 lignes donc on va rester sur un apercu ...
et pour le fichier de configuration il ne comporte à l'heure actuelle que cela
[code:1]
exports=C:\Users\test\Scripts\exports
compteurs=772;39[/code:1]
C'est grave docteur?
Connexion ou Créer un compte pour participer à la conversation.
- Matthew BETTON
- Hors Ligne
- Membre platinium
-
Réduire
Plus d'informations
- Messages : 968
- Remerciements reçus 0
il y a 13 ans 10 mois #12308
par Matthew BETTON
Réponse de Matthew BETTON sur le sujet Re:Get-counter et les variables
Ici
[code:1]$check = (Get-Content .\configuration.ini | Where-Object {$_ -match \"compteurs=\"}).split(\"=\"«»)
$check = $check[-1].split(\";\"«»)[/code:1]
Tu récupères un tableau de valeurs :
[code:1]PS> $Check
772
39[/code:1]
[code:1]PS D:\tmp> $check | Get-Member
TypeName: System.String
Name MemberType Definition
----
Clone Method System.Object Clone()
CompareTo Method int CompareTo(System.Object value), int CompareTo(string strB«»)
Contains Method bool Contains(string value)
CopyTo Method System.Void CopyTo(int sourceIndex, char[] destination, int destinationIndex,...
EndsWith Method bool EndsWith(string value), bool EndsWith(string value, System.StringCompari...
Equals Method bool Equals(System.Object obj), bool Equals(string value), bool Equals(string...
GetEnumerator Method System.CharEnumerator GetEnumerator()
GetHashCode Method int GetHashCode()
GetType Method type GetType()
GetTypeCode Method System.TypeCode GetTypeCode()
IndexOf Method int IndexOf(char value), int IndexOf(char value, int startIndex), int IndexOf...
IndexOfAny Method int IndexOfAny(char[] anyOf), int IndexOfAny(char[] anyOf, int startIndex), i...
Insert Method string Insert(int startIndex, string value)
IsNormalized Method bool IsNormalized(), bool IsNormalized(System.Text.NormalizationForm normaliz...
LastIndexOf Method int LastIndexOf(char value), int LastIndexOf(char value, int startIndex), int...
LastIndexOfAny Method int LastIndexOfAny(char[] anyOf), int LastIndexOfAny(char[] anyOf, int startI...
Normalize Method string Normalize(), string Normalize(System.Text.NormalizationForm normalizat...
PadLeft Method string PadLeft(int totalWidth), string PadLeft(int totalWidth, char paddingChar)
PadRight Method string PadRight(int totalWidth), string PadRight(int totalWidth, char padding...
Remove Method string Remove(int startIndex, int count), string Remove(int startIndex)
Replace Method string Replace(char oldChar, char newChar), string Replace(string oldValue, s...
Split Method string[] Split(Params char[] separator), string[] Split(char[] separator, int...
StartsWith Method bool StartsWith(string value), bool StartsWith(string value, System.StringCom...
Substring Method string Substring(int startIndex), string Substring(int startIndex, int length)
ToCharArray Method char[] ToCharArray(), char[] ToCharArray(int startIndex, int length)
ToLower Method string ToLower(), string ToLower(System.Globalization.CultureInfo culture)
ToLowerInvariant Method string ToLowerInvariant()
ToString Method string ToString(), string ToString(System.IFormatProvider provider)
ToUpper Method string ToUpper(), string ToUpper(System.Globalization.CultureInfo culture)
ToUpperInvariant Method string ToUpperInvariant()
Trim Method string Trim(Params char[] trimChars), string Trim()
TrimEnd Method string TrimEnd(Params char[] trimChars)
TrimStart Method string TrimStart(Params char[] trimChars)
Chars ParameterizedProperty char Chars(int index) {get;}
Length Property System.Int32 Length {get;}
[/code:1]
Ces valeurs ne contiennent plus le \";\", ce séparateur ayant servi à découper (split) le précédent résultat.
Or, ensuite, tu recherches chacune de ces valeurs, mais de nouveau avec le \";\" :
[code:1]
Get-Content .\compteurs.csv | Where-Object {$_ -like ($b+\";*\"«»)[/code:1]
Cette commande ne te renvoie donc... rien !
Ce qui n'est pas le cas de
[code:1]
Get-Content .\compteurs.csv | Where-Object {$_ -like ($b+\"*\"«»)[/code:1]
Ce n'est pas la première fois que je vois dans ce forum l'utilisation de 'Get-Content' avec du contenu de fichier csv. Normalement, un fichier csv contient en première ligne des entêtes de colonne qui définissent le nom de chaque propriété, pour chaque nouvelle ligne, donc chaque nouvel élément d'une collection. Ensuite on utilise plutôt la Cmdlet 'Import-Csv' qui permet de travailler de façon beaucoup plus efficace...
[code:1]Get-Help Import-Csv -Full
Get-Help Import-Csv -Examples[/code:1]
Un exemple de contenu :
[code:1]
Indice;Description;Nom
1;Compteurs des services de base de module de plateforme sécurisée;\Compteurs des services de base de module de plateforme sécurisée\Ressources actuelles
2;Compteurs des services de base de module de plateforme sécurisée;\Compteurs des services de base de module de plateforme sécurisée\Contextes actuels[/code:1]
Un exemple d'import du fichier csv :
[code:1]$Compteurs = Import-Csv .\Compteurs.csv -delimiter \";\"
$Compteurs[0]
$Compteurs[0].Nom
$Selection = $Compteurs | Where-Object{$_.Indice -eq \"39\"}
$Selection.Nom
Get-Counter -Counter $Selection.Nom
[/code:1]
Si le fichier ne contient pas de header, il est possible de l'importer et de préciser ce header via le paramétre header :
[code:1]
$Compteurs = Import-Csv .\Compteurs.csv -Delimiter \";\" -header Indice,Description,Nom[/code:1]<br><br>Message édité par: Matthew BETTON, à: 2/07/12 22:27
[code:1]$check = (Get-Content .\configuration.ini | Where-Object {$_ -match \"compteurs=\"}).split(\"=\"«»)
$check = $check[-1].split(\";\"«»)[/code:1]
Tu récupères un tableau de valeurs :
[code:1]PS> $Check
772
39[/code:1]
[code:1]PS D:\tmp> $check | Get-Member
TypeName: System.String
Name MemberType Definition
----
Clone Method System.Object Clone()
CompareTo Method int CompareTo(System.Object value), int CompareTo(string strB«»)
Contains Method bool Contains(string value)
CopyTo Method System.Void CopyTo(int sourceIndex, char[] destination, int destinationIndex,...
EndsWith Method bool EndsWith(string value), bool EndsWith(string value, System.StringCompari...
Equals Method bool Equals(System.Object obj), bool Equals(string value), bool Equals(string...
GetEnumerator Method System.CharEnumerator GetEnumerator()
GetHashCode Method int GetHashCode()
GetType Method type GetType()
GetTypeCode Method System.TypeCode GetTypeCode()
IndexOf Method int IndexOf(char value), int IndexOf(char value, int startIndex), int IndexOf...
IndexOfAny Method int IndexOfAny(char[] anyOf), int IndexOfAny(char[] anyOf, int startIndex), i...
Insert Method string Insert(int startIndex, string value)
IsNormalized Method bool IsNormalized(), bool IsNormalized(System.Text.NormalizationForm normaliz...
LastIndexOf Method int LastIndexOf(char value), int LastIndexOf(char value, int startIndex), int...
LastIndexOfAny Method int LastIndexOfAny(char[] anyOf), int LastIndexOfAny(char[] anyOf, int startI...
Normalize Method string Normalize(), string Normalize(System.Text.NormalizationForm normalizat...
PadLeft Method string PadLeft(int totalWidth), string PadLeft(int totalWidth, char paddingChar)
PadRight Method string PadRight(int totalWidth), string PadRight(int totalWidth, char padding...
Remove Method string Remove(int startIndex, int count), string Remove(int startIndex)
Replace Method string Replace(char oldChar, char newChar), string Replace(string oldValue, s...
Split Method string[] Split(Params char[] separator), string[] Split(char[] separator, int...
StartsWith Method bool StartsWith(string value), bool StartsWith(string value, System.StringCom...
Substring Method string Substring(int startIndex), string Substring(int startIndex, int length)
ToCharArray Method char[] ToCharArray(), char[] ToCharArray(int startIndex, int length)
ToLower Method string ToLower(), string ToLower(System.Globalization.CultureInfo culture)
ToLowerInvariant Method string ToLowerInvariant()
ToString Method string ToString(), string ToString(System.IFormatProvider provider)
ToUpper Method string ToUpper(), string ToUpper(System.Globalization.CultureInfo culture)
ToUpperInvariant Method string ToUpperInvariant()
Trim Method string Trim(Params char[] trimChars), string Trim()
TrimEnd Method string TrimEnd(Params char[] trimChars)
TrimStart Method string TrimStart(Params char[] trimChars)
Chars ParameterizedProperty char Chars(int index) {get;}
Length Property System.Int32 Length {get;}
[/code:1]
Ces valeurs ne contiennent plus le \";\", ce séparateur ayant servi à découper (split) le précédent résultat.
Or, ensuite, tu recherches chacune de ces valeurs, mais de nouveau avec le \";\" :
[code:1]
Get-Content .\compteurs.csv | Where-Object {$_ -like ($b+\";*\"«»)[/code:1]
Cette commande ne te renvoie donc... rien !
Ce qui n'est pas le cas de
[code:1]
Get-Content .\compteurs.csv | Where-Object {$_ -like ($b+\"*\"«»)[/code:1]
Ce n'est pas la première fois que je vois dans ce forum l'utilisation de 'Get-Content' avec du contenu de fichier csv. Normalement, un fichier csv contient en première ligne des entêtes de colonne qui définissent le nom de chaque propriété, pour chaque nouvelle ligne, donc chaque nouvel élément d'une collection. Ensuite on utilise plutôt la Cmdlet 'Import-Csv' qui permet de travailler de façon beaucoup plus efficace...
[code:1]Get-Help Import-Csv -Full
Get-Help Import-Csv -Examples[/code:1]
Un exemple de contenu :
[code:1]
Indice;Description;Nom
1;Compteurs des services de base de module de plateforme sécurisée;\Compteurs des services de base de module de plateforme sécurisée\Ressources actuelles
2;Compteurs des services de base de module de plateforme sécurisée;\Compteurs des services de base de module de plateforme sécurisée\Contextes actuels[/code:1]
Un exemple d'import du fichier csv :
[code:1]$Compteurs = Import-Csv .\Compteurs.csv -delimiter \";\"
$Compteurs[0]
$Compteurs[0].Nom
$Selection = $Compteurs | Where-Object{$_.Indice -eq \"39\"}
$Selection.Nom
Get-Counter -Counter $Selection.Nom
[/code:1]
Si le fichier ne contient pas de header, il est possible de l'importer et de préciser ce header via le paramétre header :
[code:1]
$Compteurs = Import-Csv .\Compteurs.csv -Delimiter \";\" -header Indice,Description,Nom[/code:1]<br><br>Message édité par: Matthew BETTON, à: 2/07/12 22:27
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.044 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Get-counter et les variables