Guide ultime PowerShell Hashtable avec exemples

20 mai 2021 5546 Vues PowerShell Hashtable Votre guide ultime avec des exemples

Une table de hachage PowerShell est une collection d'éléments et leurs valeurs. Les éléments sont appelés clés. De plus, chaque clé d'une table de hachage a une valeur équivalente.

Essentiellement, une table de hachage PowerShell est une 'table' de magasin clé/valeur.

Dans cette zone S, je vais vous apprendre tout ce que vous devez savoir sur les tables de hachage PowerShell. La première section explore la différence entre une table de hachage et un tableau.

Puis, dans la deuxième section, en utilisant le Get-Membre Cmdlet, je vais vous emmener derrière le capot des tables de hachage.

Enfin, j'explorerai différentes manières d'utiliser les tables de hachage dans les scripts.

Parcourir les sujets de publication

Table de hachage PowerShell vs tableau PowerShell

Table de hachage PowerShell vs tableau PowerShell

Avant de plonger dans Hashtables, je veux expliquer la différence entre Hashtables et Arrays. Cette différenciation est importante car les deux concepts peuvent facilement se confondre.

Dans l'introduction de ce guide, j'ai expliqué qu'une table de hachage est un magasin clé/valeur. De plus, une table de hachage est comme une table avec des clés et des valeurs.

Au contraire, un tableau PowerShell est une collection de valeurs ou d'objets.

La principale différence entre une table de hachage PowerShell et un tableau PowerShell est qu'une table de hachage est une collection d'éléments (clés) et leurs valeurs, tandis qu'un tableau n'est qu'une liste d'éléments.

Pour un exemple rapide, les codes ci-dessous sont des exemples de tables de hachage et de tableau - le premier code crée une table de hachage tandis que le second code crée un tableau :

|__+_| |__+_| À partir des exemples de code, vous pouvez voir que si une table de hachage est entourée de {}, un tableau est entouré de ().

La capture d'écran ci-dessous affiche les résultats des deux codes.

Table de hachage PowerShell vs tableau PowerShell

La partie de la capture d'écran intitulée (1) est le résultat de la table de hachage. Avez-vous vu la paire clé/valeur ?

Dans l'exemple ci-dessus, la clé Root a la valeur C:UsersvictoDocuments. De plus, la clé PSProvider a une valeur appelée FileSystem.

Enfin, Name a la valeur Document.

De plus, la partie de la capture d'écran étiquetée (2) contient le résultat du code de tableau. Comme expliqué précédemment, il ne s'agit que d'une liste.

Méthodes et propriétés de la table de hachage PowerShell

Méthodes et propriétés de la table de hachage PowerShell

Dans l'introduction, j'ai promis de vous emmener derrière le capot de PowerShell Hashtables. Ça y est ...!

Dans cette section, je vais vous apprendre à utiliser l'applet de commande Get-Member pour regarder derrière les tables de hachage.

Lorsque vous dirigez le résultat d'une table de hachage PowerShell vers Get-Membre , vous pourrez passer en revue les Méthodes et Propriétés de la table de hachage.

Revenons à notre premier exemple rapide ci-dessus :

|__+_|

Copiez le code dans un nouveau document PowerShell ISE. Ensuite, exécutez le code.

Ensuite, voir disponible Méthodes et Propriétés dans cette table de hachage, exécutez cette commande sur le même PowerShell ISE.

|__+_|

Pour exécuter la commande ci-dessus, collez-la sous le dernier code. Ensuite, mettez-le en surbrillance et appuyez sur F8 ou cliquez sur l'icône en surbrillance.

Méthodes et propriétés de la table de hachage PowerShell

La commande affichera les résultats dans le volet de la console PowerShell.

Pour l'instant, regardez en haut du résultat. Il a TypeName : System.Collections.Hashtable.

Cela confirme que les objets redirigés vers l'applet de commande Get-Member sont une table de hachage !

Dans les sous-sections suivantes de cette section, je vais vous montrer comment utiliser les méthodes et propriétés courantes d'une table de hachage PowerShell.

Comment ajouter ou supprimer des éléments à la table de hachage existante

Dans cette section, vous apprendrez à ajouter de nouveaux éléments à une table de hachage PowerShell existante. De plus, vous apprendrez également à supprimer un élément d'une table de hachage PowerShell existante.

Avant de m'y plonger, je tiens à mentionner que vous pouvez également créer une table de hachage vide. Ensuite, ajoutez des clés/valeurs à la table de hachage - plus à ce sujet plus tard.

Revenons à l'ajout ou à la suppression d'éléments dans les hastables PowerShell existants - lorsque nous avons exécuté le $table de hachage | Get-Membre commande, l'une des méthodes affichées dans le résultat est Ajouter . Il existe aussi une méthode, Supprimer .

Voir les parties en surbrillance de la capture d'écran ci-dessous :

Méthodes et propriétés de la table de hachage PowerShell

Avant de vous montrer comment utiliser ces deux méthodes, examinons le code original de la table de hachage PowerShell :

|__+_|

La table de hachage a 3 entrées. Dans cet exemple, je vais ajouter une autre clé appelée Description avec la valeur Maps à mon dossier 'Mes documents'.

Pour terminer cette tâche, je vais exécuter la commande ci-dessous (sur la même console PowerShell ISE que j'ai exécuté les commandes précédentes)

|__+_| Notez comment j'ai utilisé le Ajouter Méthode . J'ajoute un point (.) à côté de la variable qui contient la table de hachage. Ensuite, j'ai inclus la méthode, Ajouter , suivie par (). Enfin, j'ai inclus la nouvelle paire clé/valeur que je veux ajouter à la table de hachage.

Une fois que vous avez exécuté la commande, pour confirmer que la clé supplémentaire a été ajoutée, mettez en surbrillance $hashtable et appuyez sur F8.

|__+_|

Voici une capture d'écran du résultat - confirmant que la nouvelle clé/valeur a été ajoutée.

Ensuite, vous pouvez utiliser la même approche pour supprimer une valeur d'une table de hachage PowerShell.

Pour supprimer la dernière clé que nous avons ajoutée à la table de hachage, exécutez une commande similaire à la dernière commande. Cette fois, remplacez le Ajouter Méthode avec le Supprimer Méthode.

Voici la commande :

|__+_| le Supprimer La méthode n'inclut que le clé . Vous n'avez pas besoin d'inclure la clé valeur dans la commande.

Tout d'abord, exécutez la commande ci-dessus. Ensuite, pour confirmer que la clé a été supprimée, mettez en surbrillance $hashtable et appuyez sur F8.

|__+_|

Le résultat de la commande confirme que la clé a bien été supprimée !

Méthodes et propriétés de la table de hachage PowerShell - Comment ajouter ou supprimer des éléments à la table de hachage existante

Comment vérifier si une table de hachage PowerShell contient une clé

Lorsque nous avons transmis le hastable ci-dessous au Get-Membre Applet de commande, l'une des méthodes affichées est la ContientClé Méthode - voir la capture d'écran ci-dessous.

|__+_|

le ContientClé La méthode peut être utilisée de plusieurs façons. Cependant, l'une des applications courantes de cette méthode est de l'utiliser pour vérifier si une clé existe dans une table de hachage et si ce n'est pas le cas, ajoutez la clé.

Une autre application de la ContientClé La méthode d'une table de hachage PowerShell consiste simplement à l'utiliser pour vérifier si un nom de clé existe dans la table de hachage.

Pour vérifier si une clé existe dans une table de hachage PowerShell à l'aide de la ContientClé Méthode, exécutez la commande ci-dessous :

|__+_|

Cette commande vérifie si une clé portant le nom Description existe dans la table de hachage enregistrée dans la variable $hashtable. Le résultat de la commande affiche False.

Méthodes et propriétés de la table de hachage PowerShell - Comment vérifier si une table de hachage PowerShell contient une clé

Pour vérifier si la clé Description existe avant de l'ajouter à la table de hachage PowerShell, nous aurons besoin d'une ligne de codes supplémentaire à la commande précédente.

Voici le code amélioré.

|__+_|

Le code utilise l'instruction conditionnelle IF pour vérifier si une clé portant le nom Description existe dans la table de hachage.

Ensuite, si le résultat est False, dans la partie exécution de la commande de l'instruction IF, nous utilisons le Ajouter Méthode de la table de hachage PowerShell pour ajouter la clé à la table de hachage.

Cependant, si la clé existe dans la table de hachage, dans la partie Else de l'instruction IF, nous affichons un message informant la personne qui a exécuté la commande que la clé existe déjà.

Après avoir exécuté la dernière commande, mettez en surbrillance $hashtable variable et exécutez-le seul. Le résultat confirme que la clé Description a été ajoutée à la variable car elle n'existait pas.

Pour tester si ce script fonctionne, exécutez-le à nouveau…

|__+_|

Cette fois-ci, le script n'a pas ajouté la clé. Au lieu de cela, il a renvoyé les informations dans la partie Else de l'instruction IF - La clé existe déjà dans la table de hachage .

Méthodes et propriétés de la table de hachage PowerShell - Comment vérifier si une table de hachage PowerShell contient une clé

Comment convertir une table de hachage PowerShell en chaîne

La première étape pour convertir une table de hachage PowerShell en chaîne consiste à renvoyer les valeurs des clés dans la table de hachage. En d'autres termes, vous convertissez la table de hachage PowerShell en un tableau PowerShell.

Pour renvoyer les valeurs dans une table de hachage, appelez le Valeurs propriété de la table de hachage.

Voici la commande qui renvoie les valeurs dans une table de hachage :

|__+_|

Une fois que vous avez renvoyé les valeurs dans une table de hachage PowerShell, l'étape suivante consiste à diriger $hashtable.Values ​​vers le Out-String Commander…

|__+_| Plus loin dans ce guide, vous apprécierez l'importance de convertir une table de hachage PowerShell en chaîne. Pour voir l'application pratique de ceci dans un script SysAdmin réel, lisez la suite.

Comment utiliser la table de hachage PowerShell GetEnumerator Méthode

Une autre méthode importante d'une table de hachage PowerShell est la GetEnumerator Méthode.

Vous pouvez utiliser cette méthode pour séparer les clés d'une table de hachage en chaînes individuelles. Voici un exemple de commande du GetEnumerator Méthode d'une table de hachage :

|__+_|

Comme vous pouvez le voir dans le résultat de la commande ci-dessus, les clés et les valeurs sont renvoyées dans des en-têtes individuels. Je ne peux pas penser à une application maintenant, cependant, si jamais vous avez besoin de briser les clés dans une table de hachage PowerShell, vous savez comment le faire !

Comment compter les éléments de la table de hachage PowerShell

Il existe encore une autre propriété de table de hachage utile, Compter . Comme son nom l'indique, cette propriété renvoie le nombre de clés dans une table de hachage.

Comme le Valeurs Property, pour appeler la propriété Count, utilisez une commande similaire à celle ci-dessous :

|__+_|

La commande confirme que la table de hachage, $hashtable a 4 clés.

Comment compter les éléments de la table de hachage PowerShell

Comment créer une table de hachage PowerShell vide et ajouter des clés

Comment créer une table de hachage PowerShell vide et ajouter des clés

Jusqu'à présent, tous les exemples de cette zone S se sont concentrés sur la manipulation de la table de hachage PowerShell avec des clés existantes. Dans cette section, vous apprendrez à créer une table de hachage vide.

Ensuite, ajoutez des clés à la table de hachage.

Pour créer une table de hachage PowerShell vide, entrez simplement le @ signe, suivi de {} supports. Voici un exemple de table de hachage vide enregistrée dans une variable, Table de hachage vide :

|__+_|

Pour confirmer que la table de hachage est créée sans valeurs, exécutez la commande précédente. Ensuite, exécutez la variable seule.

|__+_|

L'étape suivante consiste à utiliser le Ajouter méthode, abordée précédemment dans ce guide, pour ajouter des clés/valeurs à la table de hachage. Dans cet exemple, je vais ajouter une clé, appelée Nom , avec une valeur de Document .

Voici la commande pour effectuer cette tâche.

|__+_|

Enfin, pour confirmer que les valeurs ont été ajoutées avec succès, exécutez la variable, $Emptyhashtable :

|__+_|

La dernière commande confirme que les valeurs ont été ajoutées avec succès :

Comment créer une table de hachage PowerShell avec plusieurs valeurs et une clé

Comment créer une table de hachage PowerShell avec plusieurs valeurs et une clé

Dans tous les exemples que nous avons couverts jusqu'à présent, la table de hachage PowerShell a une paire clé/valeur. Cependant, dans certaines circonstances, vous devrez peut-être avoir une seule clé dans une table de hachage avec plusieurs valeurs.

Dans ce cas, vous souhaitez effectivement créer une table de hachage avec des tableaux comme valeurs.

Pour commencer, je pense qu'il est préférable de vous montrer les codes que j'ai utilisés pour différencier une table de hachage d'un tableau.

|__+_| |__+_|

Ainsi, pour créer une table de hachage PowerShell avec des clés uniques et plusieurs valeurs, exécutez un script similaire à celui-ci :

|__+_|

Dans le script ci-dessus, NomJournal est la clé de la table de hachage tandis que les valeurs Système, Application et Sécurité sont affectées à la clé. En effet, nous avons créé une seule clé hastable avec plusieurs valeurs.

Pour répertorier les valeurs individuelles dans le NomJournal clé, exécutez la commande ci-dessous :

|__+_|

La partie de la capture d'écran ci-dessous étiquetée (1) est le résultat de la table de hachage, $hashtableWithArrays . De plus, la partie étiquetée (2) montre le résultat de la $hashtableWithArrays.Values commander.

Si vous êtes familier avec les journaux d'événements Windows - Système, Application et Sécurité - sont les noms des journaux d'événements Windows.

Dans la section suivante, je vais vous montrer comment utiliser la boucle PowerShell ForEach pour parcourir la table de hachage ci-dessus - et exécuter le Get-EventLog commande sur ces 3 journaux d'événements - en utilisant un seul script PowerShell.

Comment itérer la table de hachage PowerShell avec la boucle ForEach

Comment itérer PowerShell Hashtable avec ForEach

Dans la dernière section, j'ai créé une table de hachage PowerShell à clé unique avec plusieurs valeurs.

Pour l'exemple de cette section, j'ai changé la variable qui stockait la table de hachage en LogNameKeys . Voici le script mis à jour.

|__+_|

Dans cette section, je vais vous apprendre à utiliser Pour chaque pour parcourir les valeurs stockées dans le NomJournal clé et exécutez le Get-EventLog commander.

Pour un cours de rappel rapide sur PowerShell ForEach, voici la syntaxe générale d'une commande PowerShell ForEach :

|__+_|

Si vous appliquez la syntaxe ci-dessus à notre LogNames hashtable, la commande mise à jour ressemblera à ceci :

Les lignes qui commencent par # sont des commentaires PowerShell. |__+_|

La première partie du script est le même script qui crée la table de hachage PowerShell à clé unique avec plusieurs valeurs. Voici le scénario :

|__+_|

Dans la deuxième partie du script, j'ai converti les valeurs stockées dans ($LogNameKeys.Values) en chaînes et enregistré le résultat dans une autre variable, LogNameKeysAsStrings .

|__+_|

Enfin, dans la troisième partie du script – la boucle ForEach est introduite :

|__+_|

Dans cette partie du script, nous disons à PowerShell de prendre chaque valeur stockée dans le NomJournal clé ( $LogNameKeysAsStrings ) - enregistrer temporairement cette valeur individuelle dans la variable LogNameKey – puis, utilisez la variable temporelle pour exécuter le Get-EventLog commander.

j'ai inclus le Le plus récent paramètre de la Get-EventLog commande avec une valeur de 5 afin que la commande renvoie les 5 dernières entrées de chaque journal des événements. Lorsque vous regardez un script PowerShell, cela peut sembler compliqué. Cependant, si vous regardez attentivement, c'est généralement très facile.

Maintenant, copiez le script ci-dessous dans un nouveau document PowerShell ISE et exécutez-le.

Ouvrez PowerShell ISE en tant qu'administrateur. Si vous n'ouvrez pas PowerShell ISE en tant qu'administrateur, vous recevrez des messages d'erreur d'accès. |__+_|

La capture d'écran ci-dessous affiche le résultat du script. Il y a 15 lignes dans le volet de résultats - représentant 5 des journaux d'événements système, application et sécurité.

Comment personnaliser un rapport avec PowerShell Hashtable et Select-Object

Comment personnaliser un rapport avec PowerShell Hashtable et Select-Object

Dans la dernière section, nous avons créé un script PowerShell qui extrait le rapport du journal des événements Windows. Voici une capture d'écran du rapport

La sortie par défaut du script comporte 5 colonnes - Indice , Temps , Type d'entrée , La source , ID d'instance , et Message . Si vous l'envoyez sous forme de rapport, vous souhaiterez peut-être remplacer ces noms de colonnes par des noms facilement compréhensibles.

Voici le script de la dernière section.

Le script a été légèrement modifié. J'ai maintenant une variable, EventLogReport qui enregistre la sortie de la boucle ForEach. J'expliquerai pourquoi cela est nécessaire plus tard. |__+_|

Pour modifier les noms d'en-tête de colonne à partir de ce script, nous dirigerons le Get-EventLog commande à un Select-Objet commander.

Ensuite, créez une table de hachage PowerShell dans le Select-Objet commande qui modifie les noms des colonnes. Voici le script modifié qui exécute la magie.

|__+_|

Le scénario apparaît bien plus complexe qu'il ne l'est en réalité. Cependant, si vous vous concentrez sur la partie du script après Select-Object, il sera facile de repérer la différence entre ce script et la copie précédente.

Plus précisément, j'ai inclus des tables de hachage dans le Select-Objet bloc du code. Chaque table de hachage personnalise la sortie du Get-EventLog commander.

Voici un exemple de table de hachage de Select-Objet bloquer:

|__+_|

Comme d'habitude, la table de hachage PowerShell comporte deux éléments. La clé est la Nom , la valeur est la Expression .

Une autre chose importante à noter est qu'à la fin de chaque table de hachage dans le Select-Objet bloc, il y a une virgule (,).

Enfin, voici le résultat du script final en PowerShell :

Plus tôt, j'ai promis d'expliquer pourquoi j'ai présenté $EventLogReport variable pour enregistrer la sortie de la boucle ForEach. Sans cette variable, le résultat final affichera 3 résultats individuels pour chacun des 3 journaux d'événements. Cependant, en stockant l'ensemble des résultats dans une variable, j'ai pu diriger cette variable dans Format-Table - cela affiche l'ensemble du résultat sous la forme d'un seul tableau. Voici la commande qui a effectué la magie. |__+_|

Comment exporter la table de hachage PowerShell vers CSV

Comment exporter la table de hachage PowerShell vers CSV

Dans cette dernière section, vous apprendrez à exporter une table de hachage PowerShell vers CSV.

Dans mon premier exemple pour cette section, je vais vous montrer comment exporter ce hashtabe vers CSV.

|__+_|

Pour exporter avec succès cette table de hachage PowerShell vers un fichier CSV, vous devez utiliser le GetEnumerator Méthode (discutée précédemment) pour lister les valeurs. Sinon, les paires clé/valeur réelles ne seront pas exportées.

Voici le script modifié qui exporte la table de hachage enregistrée dans le table de hachage variable dans un fichier CSV.

|__+_|

En introduit le script ci-dessous :

|__+_|

Le scénario comprend le GetEnumerator Méthode dans la table de hachage. Dirige ensuite la sortie vers le Select-Objet commander.

Enfin, je dirige la sortie du Select-Objet commande au Exporter-Csv commander. Pour en savoir plus sur l'utilisation Exporter-Csv Applet de commande, lisez notre guide – Powershell NoTypeInformation : Applications et exemples .

Lorsque vous exécutez ce script, il crée un fichier CSV appelé table de hachage.csv , dans le chemin que vous avez spécifié. Voir la capture d'écran ci-dessous pour la sortie du fichier CSV.

|__+_|

Dans mon deuxième exemple, j'exporterai la sortie du script que nous avons créé dans la dernière section - le script du journal des événements - vers un fichier CSV.

Voici le scénario. Pour exporter le rapport au format CSV, j'ai ajouté le code sous celui-ci à la fin de ce script.

|__+_| |__+_|

Le code redirige la sortie du Pour chaque boucle – enregistrée dans le EventLogReport variables - à la Commande Export-Csv . Le fichier CSV généré est illustré dans la capture d'écran ci-dessous.

C'est tout - un guide complet sur la table de hachage PowerShell ! J'espère que vous l'avez trouvé utile?

Si vous l'avez trouvé utile, merci de voter Oui à la question Was this post Helpful ci-dessous.

Alternativement, vous pouvez poser une question, laisser un commentaire ou fournir plus de commentaires avec le formulaire Laisser une réponse qui se trouve à la fin de cette page.

Enfin, pour plus de zones S techniques PowerShell, visitez notre page de guide pratique Windows PowerShell. Vous pouvez également trouver notre page Travail à domicile très utile.

Références et lectures complémentaires

  1. Tout ce que vous vouliez savoir sur les tables de hachage
  2. Combinez des tableaux et des tables de hachage dans PowerShell pour le plaisir et le profit
  3. À propos des tables de hachage