dimanche 6 novembre 2011

Créer des variables en PowerShell sous forme de tableau

Récemment, j'ai eu besoin de créer des variables en PowerShell sur lesquelles je souhaitais faire des tris et avoir une présentation du même type que get-childitem ou autre.

En fait, ce que je souhaitais avoir, c’était quelque chose de ce genre:

Ceci s'apparente à une "Hash table", mais pour réaliser ceci des façon simple, les informations disponible sur le net sont difficile à trouver.

En réalité, il s'agit uniquement d'un objet dans un tableau.
Donc, si vous souhaitez créer ceci, vous devez d'abord créer cet objet.

Différentes méthode existent, mais à mon goût une simple et qui fonctionne est celle-ci:

$d=New-Object PSObject
$d | Add-Member -Name Nom -MemberType NoteProperty -Value "Valeur a mettre"
Ce qui donne:




Puis, pour ajouter une seconde colonne:
$d | Add-Member -Name NomDeLaSecondeColonne -MemberType NoteProperty -Value "Valeur de ma 2éme colonne"





Bon, et maintenant que j'ai une variable avec plusieurs "colonnes", comment je gère mes lignes?
Il faut en réalité ajouter chaque Objet dans une variable de type tableau:
$MaVariable=@() #Création de la variable tableau
$MaVariable+=$d #Ajout de l'Objet dans le tableau







Et donc, pour ajouter une seconde ligne:

$d=New-Object PSObject
$d | Add-Member -Name Nom -MemberType NoteProperty -Value "Ma seconde ligne"
$d | Add-Member -Name NomDeLaSecondeColonne -MemberType NoteProperty -Value "2éme ligne, 2éme colonne"
$MaVariable+=$d





Personnellement, j'utilise une petite fonction:
function addUser
{
param([string]$Nom,[string]$Prenom,[string]$Mail)
$d=New-Object PSObject
$d | Add-Member -Name Nom -MemberType NoteProperty -Value $Nom
$d | Add-Member -Name Prenom -MemberType NoteProperty -Value $Prenom
$d | Add-Member -Name Mail -MemberType NoteProperty -Value $Mail
return $d
}
$MaListe=@()
$MaListe+=addUser -Nom "Mergoux" -Prenom "Gregory" -Mail "addr1@gmail.com"
$MaListe+=addUser -Nom "Denis" -Prenom "Michel" -Mail "addr2@gmail.com"
$MaListe+=addUser -Nom "Dupond" -Prenom "Lionel" -Mail "addr3@gmail.com"
$MaListe+=addUser -Nom "Ballais" -Prenom "Monique" -Mail "addr4@gmail.com"
$MaListe+=addUser -Nom "Chirac" -Prenom "Brigitte" -Mail "addr5@gmail.com"
$MaListe+=addUser -Nom "Martin" -Prenom "Etienne" -Mail "addr6@gmail.com"
$MaListe+=addUser -Nom "Dupont" -Prenom "Monique" -Mail "addr7@gmail.com"












Et les tries deviennent un jeu d'enfants :)
$MaListe | Where-Object { $_.Prenom -match "Monique" }
$MaListe | Where-Object { $_.Nom -match "Dupon" }










Idem pour les calculs:
($MaListe | Measure-Object).Count




Ou la présentation:


26 commentaires:

  1. Merci pour ce post !! Bien expliqué et super pratique.

    RépondreSupprimer
  2. Exactement ce que je cherchais!
    Merci beaucoup

    RépondreSupprimer
  3. Excellent pour une fois qu'on a quelque chose de clair !

    RépondreSupprimer
  4. Merci pour cette esplication claire et concise.

    RépondreSupprimer
  5. Merci, c'est clair et net !!!

    RépondreSupprimer
  6. Merci, enfin une explication "claire", différent de tout le bazar que l'on peut trouver sur le net..

    Sébastien

    RépondreSupprimer
  7. super merci pour ces explications

    RépondreSupprimer
  8. bravo, j ai cherché tout le web francais et anglais pour trouver un script permettant de créer un tableau avec des entêtes sans rien trouver ...
    bravo ...

    RépondreSupprimer
  9. Clair, concret et fonctionnel ! Merci du coup de pouce !

    Arnaud

    RépondreSupprimer
  10. super mec! enfin quelqu'un qui comprend ce qu'il fait et sait l'expliquer! beau travail

    RépondreSupprimer
  11. Bonjour,

    Peux-tu m'expliquer comment envoyer $MaListe par mail?

    Merci d'avance

    RépondreSupprimer
  12. Hello ! Super merci beaucoup pour ces explications !

    RépondreSupprimer
  13. Merci pour ce tuto simple mais efficace :)

    Fab

    RépondreSupprimer
  14. Parfait ! Je comprends mieux maintenant

    RépondreSupprimer
  15. Merci pour ce post

    RépondreSupprimer