Un guide débutant pour utiliser les tableaux de hachage PowerShell

Découvrir les tables de hachage pour la première fois peut vous amener à vous demander ce qu’elles sont et quel rôle crucial elles jouent dans vos scripts ou commandes. Ne vous inquiétez pas ! Ce tutoriel vous couvre pour commencer à utiliser les tables de hachage PowerShell.

En bref, les tables de hachage vous permettent de stocker et de manipuler des données à l’aide de paires clé-valeur, auxquelles vous pouvez accéder rapidement et efficacement. Et dans ce tutoriel, vous apprendrez les bases des tables de hachage et comment les utiliser pour vos scripts et commandes PowerShell.

Lisez la suite et commencez à élargir vos compétences avec les tables de hachage PowerShell !

Prérequis

Ce tutoriel sera une démonstration pratique. Pour suivre, assurez-vous d’avoir un système avec PowerShell v5+ installé et configuré. Ce tutoriel utilise Windows 10 avec PowerShell 7, mais d’autres versions de PowerShell et de Windows fonctionneront également.

Création d’une table de hachage PowerShell

Récupérer des données spécifiques peut devenir une situation de « chercher une aiguille dans une botte de foin » à un moment donné. Mais avec les tables de hachage, vous pouvez rapidement rechercher des éléments particuliers dans une vaste collection de données.

En PowerShell, les tables de hachage sont des structures de données flexibles utilisées de nombreuses manières, telles que le stockage de données de configuration, le passage d’arguments à des cmdlets et le stockage de données dans un script.

Pour voir comment fonctionne une table de hachage PowerShell, vous devrez d’abord en créer une comme suit :

1. Ouvrez une session PowerShell et exécutez la commande suivante, qui ne produit pas de sortie mais déclare une variable appelée name pour référencer une hashtable vide.

Comme vous pouvez le voir ci-dessous, similaire aux tableaux en PowerShell, les hashtables sont définies en utilisant le symbole @.

$name = @{}

2. Ensuite, exécutez la commande ci-dessous pour vérifier le type de la variable name (GetType()).

$name.GetType()

Le type de la variable name est Hashtable, comme indiqué ci-dessous. Ces informations confirment que votre hashtable a été créée avec succès.

Verifying the newly-created hashtable

3. Après avoir vérifié votre hashtable, exécutez le code suivant pour vérifier si la hashtable est vide ou non.

Le code ci-dessous détermine si la propriété Count est égale (-eq) à 0, et affiche un message correspondant.

# Comparer si la valeur de la propriété Count est égale (-eq) à 0
if ($name.Count -eq 0) {
	# Si oui, afficher le message ci-dessous.
  Write-Output "The hashtable is empty."
} else {
	# Sinon, afficher plutôt le message ci-dessous.
  Write-Output "The hashtable is not empty."
}

Ci-dessous, vous pouvez voir que la table de hachage est vide puisque vous venez de la créer, et il n’y a pas de paires clé-valeur définies dedans.

Checking if the hashtable is empty or not

Ajout d’éléments à une table de hachage PowerShell

Vous venez de créer une table de hachage PowerShell pratiquement vide, qui ne peut être utile que si vous ajoutez des éléments. Comment ? En ajoutant des paires clé-valeur à la table de hachage.

Similaire à un tableau, mais au lieu d’utiliser des entiers comme indices, une table de hachage PowerShell utilise des clés (qui peuvent être de n’importe quel type de données) pour identifier les valeurs. Cette caractéristique permet une insertion, une récupération et une suppression rapides des éléments de la table de hachage, car la clé localise rapidement la valeur correspondante.

Ci-dessous se trouve la syntaxe pour ajouter une paire clé-valeur à une table de hachage PowerShell, où :

  • $hashtable – Le nom de la table de hachage.
  • $key – Le nom de la clé, qui sont insensibles à la casse. Par exemple, « FirstName » et « firstname » seraient considérés comme la même clé dans une table de hachage
  • $value – La valeur à associer à la clé.
$hashtable[$key] = $value

Exécutez le code suivant, qui ne produit pas de sortie à la console mais déclare des paires clé-valeur, et ajoutez-les à votre table de hachage ($name).

Dans une table de hachage, la clé vous permet d’effectuer une fonction de hachage, qui mappe la clé à un emplacement spécifique dans la structure de données interne de la table de hachage.

? Les valeurs de la table de hachage peuvent être de n’importe quel type, telles que des nombres, des chaînes, des tableaux, des objets, et d’autres types de données comme valeurs dans une table de hachage.

# Déclarez la clé Prénom
$key = "FirstName"
# Déclarez la valeur de la clé
$value = "John"
# Ajoutez l'élément au hashtable
$name[$key] = $value

# Déclarez la clé Nom de famille
$key = "LastName"
# Déclarez la valeur de la clé
$value = "Doe"
# Ajoutez l'élément au hashtable
$name[$key] = $value

À présent, relancez le code ci-dessous pour vérifier si votre hashtable est vide.

if ($name.Count -eq 0) {
  Write-Output "The hashtable is empty."
} else {
  Write-Output "The hashtable is not empty."
}

Comme le montre ci-dessous, vous recevrez un message indiquant que le hashtable n’est pas vide cette fois-ci.

Checking if the hashtable is empty or not

Récupération des éléments d’un hashtable PowerShell

Supposez que vous êtes sûr que votre hashtable n’est pas vide. Comment savez-vous quels éléments existent dans votre hashtable ? Heureusement, vous pouvez également récupérer des éléments de votre hashtable.

Exécutez le code ci-dessous pour récupérer et afficher (Write-Output) tous les éléments de votre hashtable sous forme de paires clé-valeur, un par ligne.`

# Parcourt toutes les paires clé-valeur dans le hashtable
foreach ($key in $name.Keys) {
	$value = $name[$key]
  # Affiche toutes les paires clé-valeur dans le hashtable, une par ligne.
	Write-Output "${key}: ${value}"
}
Retrieving items from a PowerShell hashtable

À présent, exécutez le code ci-dessous pour récupérer et imprimer (Write-Output) tous les éléments dans un hashtable sur la console.

? Notez que vous utiliserez souvent le code suivant tout au long de ce tutoriel. Vous pouvez éviter de copier-coller le même code plusieurs fois en créant une fonction, mais cela sort du cadre de ce tutoriel.

# Obtenez un objet pouvant être utilisé pour itérer sur les éléments d'une collection.
$enumerator = $name.GetEnumerator()
foreach ($element in $enumerator) {
	# Renvoie une chaîne de caractères contenant la clé et la valeur de chaque élément de la collection.
	Write-Output "Key: $($element.Key), Value: $($element.Value)"
}

Cette fois, vous pouvez voir des indications sur les clés et les valeurs parmi les éléments répertoriés.

Retrieving items from a PowerShell hashtable, indicating which are the keys and value pairs

Création de tables de hachage avec des valeurs prédéfinies

Jusqu’à présent, vous n’avez regardé que la création de tables de hachage vides. Mais si vous savez que certaines valeurs seront toujours nécessaires dans votre table de hachage, vous pouvez en créer une avec des valeurs prédéfinies.

Les tables de hachage avec des valeurs prédéfinies peuvent vous faire gagner du temps et rendre votre code plus efficace, car vous n’avez pas besoin d’ajouter les valeurs à la table de hachage plus tard.

? Remarquez que la création de tables de hachage ne produit pas de sortie. Mais ne vous inquiétez pas. Dans ce tutoriel, vous vérifierez chaque table de hachage après sa création.

1. Exécutez la commande ci-dessous pour créer une table de hachage ($hashtable1) avec trois paires clé-valeur.

$hashtable1 = @{
  "Key1" = "Value1"
  "Key2" = "Value2"
  "Key3" = "Value3"
}

2. Ensuite, exécutez le code suivant pour vérifier que la nouvelle table de hachage (hashtable1) existe.

# Obtenez un objet qui peut être utilisé pour itérer sur les éléments d'une collection.
$enumerator = $hashtable1.GetEnumerator()
foreach ($element in $enumerator) {
  # Affiche une chaîne de caractères qui inclut la clé et la valeur de chaque élément de la collection.
	Write-Output "Key: $($element.Key), Value: $($element.Value)"
}

Vous verrez que les valeurs pour chaque paire clé-valeur sont imprimées à l’écran comme prévu. Cette sortie confirme que les valeurs prédéfinies sont stockées dans les emplacements appropriés dans la table de hachage.

Verifying that hashtable was created successfully with predefined values

3. Maintenant, exécutez le code ci-dessous pour créer une table de hachage ($hashtable2) avec des valeurs prédéfinies en utilisant une boucle (ou un tableau).

$keys = "Key1", "Key2", "Key3"
$values = "Value1", "Value2", "Value3"
$hashtable2 = @{}
for ($i = 0; $i -lt $keys.Count; $i++) {
  $hashtable2[$keys[$i]] = $values[$i]
}

4. Enfin, exécutez le code ci-dessous pour vérifier que la nouvelle table de hachage (hashtable2) a été créée avec succès.

# Obtenez un objet qui peut être utilisé pour itérer sur les éléments d'une collection.
$enumerator = $hashtable2.GetEnumerator()
foreach ($element in $enumerator) {
	# Affiche une chaîne de caractères qui inclut la clé et la valeur de chaque élément de la collection.
	Write-Output "Key: $($element.Key), Value: $($element.Value)"
}

La sortie ci-dessous confirme que la méthode de boucle fonctionne lors de la création d’une table de hachage avec des valeurs prédéfinies. Mais comme les éléments sont listés de manière aléatoire, passez à la section suivante pour une solution.

Verifying the new hashtable was created successfully

Créer une liste ordonnée d’éléments dans les tables de hachage

Par défaut, les éléments dans une table de hachage sont stockés sans ordre particulier. Mais que faire si vous avez besoin d’une liste ordonnée ? Vous pouvez également créer une liste ordonnée d’éléments dans vos tables de hachage pour organiser les données dans un ordre spécifique.

Pour créer une liste ordonnée d’éléments dans votre table de hachage, utilisez l’attribut [ordered] comme suit:

1. Exécutez le code suivant pour créer une liste [ordered] des éléments dans une table de hachage ($hashtable3).

$hashtable3 = [ordered]@{
"Key1" = "Value3"
"Key2" = "Value2"
"Key3" = "Value1"
}

2. Ensuite, exécutez le code suivant pour vérifier que la liste ordonnée des tables de hachage a été créée avec succès.

# Obtenez un objet qui peut être utilisé pour itérer sur les éléments d'une collection.
$enumerator = $hashtable3.GetEnumerator()
foreach ($element in $enumerator) {
	# Produit une chaîne de caractères qui inclut la clé et la valeur de chaque élément dans la collection.
	Write-Output "Key: $($element.Key), Value: $($element.Value)"
}

Comme le montre ci-dessous, les éléments répertoriés restent dans l’ordre que vous avez défini lors de la création de la table de hachage.

Certains avantages possibles de l’utilisation d’une table de hachage ordonnée comprennent, mais ne se limitent pas à, les éléments suivants :

Benefits Description
Easier to read and debug The elements are displayed in a predictable order, which can be especially useful if you work with many elements of a large hashtable.
Improved performance An ordered hashtable can be more efficient when accessing elements frequently in a specific order.
Verifying that the ordered list of hashtables has been created

3. Enfin, appelez votre table de hachage ordonnée ($hashtable3) pour confirmer que vous obtiendrez toujours une liste ordonnée d’éléments.

$hashtable3

La sortie ci-dessous confirme que vous obtiendrez toujours une liste ordonnée d’éléments, quel que soit le mode d’accès à votre table de hachage.

Verifying the list of items is still in an ordered format

Mise à jour des éléments existants dans les tables de hachage

Les données changent constamment et si vous avez des tables de hachage existantes, les mettre à jour est une tâche cruciale. Par exemple, si vous utilisez une table de hachage pour stocker des valeurs de configuration. Si tel est le cas, vous devrez peut-être mettre à jour la valeur d’une clé si la configuration change.

Pour mettre à jour une table de hachage PowerShell, l’opérateur d’assignation = fera l’affaire comme suit :

1. Exécutez la commande ci-dessous, qui ne fournit pas de sortie, mais met à jour la valeur de la clé Key2 dans $hashtable3 à NewValue2.

$hashtable3["Key2"] = "NewValue2"

Ensuite, exécutez la commande ci-dessous pour Ajouter() une nouvelle paire clé-valeur (Key4 = NewValue4) à la table de hachage ($hashtable3).

Ajouter une nouvelle paire clé-valeur ne produit pas de sortie comme la mise à jour des listes existantes dans les tables de hachage, mais vous vérifierez les modifications à l’étape suivante.

$hashtable3.Add("Key4", "NewValue4")

3. Exécutez le code suivant pour vérifier que les valeurs des clés de votre table de hachage ($hashtable3) ont été mises à jour.

# Obtenez un objet pouvant être utilisé pour itérer sur les éléments d'une collection.
$enumerator = $hashtable3.GetEnumerator()
foreach ($element in $enumerator) {
	# Produit une chaîne de caractères incluant la clé et la valeur de chaque élément dans la collection.
	Write-Output "Key: $($element.Key), Value: $($element.Value)"
}
Verifying the key values have been updated

? En PowerShell, chaque clé dans une table de hachage doit être unique. Si vous essayez d’ajouter une paire clé-valeur déjà présente dans la table de hachage, vous obtiendrez une erreur comme celle ci-dessous. Pour éviter cette erreur, passez à l’étape suivante.

Adding a key that already exists

4. Maintenant, exécutez le code suivant, qui utilise la méthode Contains() pour vérifier si la clé que vous essayez d’ajouter existe déjà dans la table de hachage avant d’ajouter la paire clé-valeur.

# Définir la variable pour contenir la nouvelle clé
$newkey="Key5"
# Vérifier si $newkey existe déjà dans la table de hachage.
if (-not $hashtable3.Contains($newkey)) {
	# Sinon, ajouter la nouvelle paire clé-valeur.
	$hashtable3.Add($newkey, "NewValue5")
	Write-Output "The new key '$newkey' has been added to the hashtable."
} else {
	# Si la clé existe, afficher un message.
	Write-Output "The key '$newkey' already exists."
}

Si la nouvelle clé n’existe pas, vous obtiendrez le message ci-dessous, indiquant que la nouvelle clé a été ajoutée à la table de hachage.

Checking if a key exists before adding it to the hashtable

Sinon, comme indiqué ci-dessous, vous recevrez un message si la clé que vous essayez d’utiliser existe déjà.

Adding a key that already exists

5. Enfin, relancez le code ci-dessous pour récupérer tous les éléments dans votre table de hachage ($hashtable3).

# Obtenez un objet pouvant être utilisé pour itérer sur les éléments d'une collection.
$enumerator = $hashtable3.GetEnumerator()
foreach ($element in $enumerator) {
	# Renvoie une chaîne qui inclut la clé et la valeur de chaque élément de la collection.
	Write-Output "Key: $($element.Key), Value: $($element.Value)"
}

Vous pouvez voir ci-dessous la nouvelle clé ajoutée (Key5) et les autres éléments que vous avez ajoutés jusqu’à présent à la table de hachage.

Checking all items listed in a hashtable

Suppression d’éléments d’une table de hachage

Trop d’éléments dans une table de hachage, surtout ceux inutiles, peuvent seulement conduire à la confusion. Supprimer les éléments qui ne sont plus pertinents ou nécessaires de votre table de hachage vous sera bénéfique.

Supposez que votre table de hachage contienne une liste d’utilisateurs et leurs informations. Si c’est le cas, supprimez les utilisateurs de votre table de hachage s’ils ne sont plus actifs.

Exécutez le code ci-dessous pour supprimer un élément spécifique (Key1) de votre table de hachage ($hashtable3).

$key = "Key5"
if ($hashtable3.Contains($key)) {
  $hashtable3.Remove($key)
  Write-Output "The key-value pair with the key '$key' was removed from the hashtable."
} else {
  Write-Output "The key-value pair with the key '$key' was not found in the hashtable."
}

En dessous, la sortie affiche un message disant que la clé a été supprimée. Mais si la clé n’existe pas, vous recevrez un message disant que la clé n’a pas été trouvée.

Removing items from a hashtable

Maintenant, exécutez le code suivant pour vérifier tous les éléments de votre table de hachage et vérifier si la suppression de l’élément a réussi.

# Obtenez un objet pouvant être utilisé pour itérer sur les éléments d'une collection.
$enumerator = $hashtable3.GetEnumerator()
foreach ($element in $enumerator) {
	# Renvoie une chaîne qui inclut la clé et la valeur de chaque élément de la collection.
	Write-Output "Key: $($element.Key), Value: $($element.Value)"
}

Ci-dessous, vous pouvez vérifier que la paire clé-valeur avec la clé « Key5 » n’existe plus dans votre hashtable.

Verifying item deletion is successful

Conclusion

Avec une structure de paire clé-valeur et un accès rapide, une table de hachage PowerShell est bien adaptée pour gérer de grandes quantités de données dans divers scénarios. Et dans ce tutoriel, vous avez appris comment créer, ajouter, mettre à jour et supprimer des éléments des tables de hachage. Tout cela vous donne les compétences pour utiliser efficacement les tables de hachage dans vos scripts.

Pourquoi ne pas pousser vos compétences nouvellement acquises au niveau supérieur ? Envisagez d’incorporer des tables de hachage dans vos scripts pour des tâches plus avancées, telles que la manipulation des données et la transformation. Ou expérimentez avec la combinaison de tables de hachage avec d’autres structures de données dans PowerShell, telles que les tableaux et les objets, pour résoudre des problèmes plus complexes ?

Source:
https://adamtheautomator.com/powershell-hashtable/