Outils pour utilisateurs

Outils du site


dev:powershell:table_de_hachage

PowerShell : table de hachage

La table de hachage est proche du tableau à l'usage : elle permet de stocker un ensemble d'éléments. Cependant au lieu d'accéder aux éléments par un index, on utilise une clé : une chaîne de caractère unique associée à la valeur.

# Définit une table de hachage de 2 éléments 
$computers = @{'NODE-AC31' = '192.168.0.17'; 'PC-03' = '192.168.0.21'}
 
# Ajouter un élément
$computers.Add('PYCOM', '192.168.0.34')
 
# Déterminer le nombre d'éléments
$computers.Count      
3
 
# Supprimer un élément
$computers.Remove('PC-03')
 
$computers.Count
2
 
# Modifier un élément
$computers.'PYCOM' = '192.168.0.43'
 
# Rechercher une clé
$computers.ContainsKey('ATARI')

Itérations

foreach($key in $ageList.keys)
{
    $message = '{0} is {1} years old' -f $key, $ageList[$key]
    Write-Output $message
}
 
 
$ageList.keys | ForEach-Object{
    $message = '{0} is {1} years old!' -f $_, $ageList[$_]
    Write-Output $message
}
 
$ageList.GetEnumerator() | ForEach-Object{
    $message = '{0} is {1} years old!' -f $_.key, $_.value
    Write-Output $message
}

Passage des arguments

On peut utiliser les tables de hachages pour définir les paramètres d'une applet. Plutot que de fournir l'ensemble des options de la cmdlet sur une seule ligne, on peut empaqueter les différentes options dans la table de hachage et transmettre la table à la commande avec la syntaxe suivante :

$DHCPScope = @{
    Name          = 'TestNetwork'
    StartRange    = '10.0.0.2'
    EndRange      = '10.0.0.254'
    SubnetMask    = '255.255.255.0'
    Description   = 'Network for testlab A'
    LeaseDuration = (New-TimeSpan -Days 8)
    Type          = "Both"
}
Add-DhcpServerV4Scope @DHCPScope

Créer un objet

Pour certains traitements, le type table de hachage n'est pas nécessaire : on souhaite simplement stocker un ensemble de valeurs et accéder aux propriétés. Dans ce cas on peut convertir la table de hachage en PSCustomObject :

$aPerson = [PSCustomObject]@{
 lastname = "Doe"
 age = "40"
 firstname = "John"
}
 
# Affiche le type de $aPerson
$aPerson.GetType()
 
IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     False    PSCustomObject                           System.Object
 
 
$aPerson.firstname
John

On peut convertir à tout moment une table de hachage en objet via le transtypage :

$aPerson = @{
 name = "Alix"
 age = 33
}
 
# Renvoie Hashtable
$aPerson.GetType()
 
# Transtypage
$aPerson = [PSCustomObject]$aPerson
 
# Renvoie PSCustomObject
$aPerson.GetType()

Références

dev/powershell/table_de_hachage.txt · Dernière modification : 2023/08/26 12:25 de yoann