PowerShell Hashtable Ultimate Guide med eksempler

20. maj 2021 5546 Visninger PowerShell Hashtable din ultimative guide med eksempler

En PowerShell hashtabel er en samling af genstande og deres værdier. Varerne omtales som nøgler. Desuden har hver nøgle i en hashtabel en tilsvarende værdi.





I bund og grund er en PowerShell-hashtabel en 'tabel' for nøgle-/værdilager.



I denne S-zone vil jeg lære dig alt, hvad du behøver at vide om PowerShell-hashtables. Det første afsnit udforsker forskellen mellem en hashtabel og en array.

Derefter, i den anden sektion, ved hjælp af Få-medlem Cmdlet, jeg tager dig med bag kølerhjelmen på hashtabeller.



Til sidst vil jeg udforske forskellige måder at bruge hashtabeller i scripting.



Gennemse indlægsemner

PowerShell Hashtable vs PowerShell Array

PowerShell Hashtable vs PowerShell Array

Før jeg dykker ned i Hashtables, vil jeg forklare forskellen mellem Hashtables og Arrays. Denne differentiering er vigtig, da de to begreber let kan blive forvirrede.



I introduktionen til denne guide forklarede jeg, at en hashtabel er en nøgle-/værdibutik. Derudover er en hashtabel som en tabel med nøgler og værdier.



Tværtimod er et PowerShell Array en samling af værdier eller objekter.

Den primære forskel mellem en PowerShell-hashtabel og en PowerShell-array er, at en hashtabel er en samling af elementer (nøgler) og deres værdier - mens en matrix kun er en liste over elementer.

For et hurtigt eksempel er koderne nedenfor eksempler på en hashtabeller og en matrix - den første kode opretter en hashtabell, mens den anden kode opretter en matrix:

|_+_| |_+_| Fra kodeeksemplerne kan du se, at mens en hashtabel er indesluttet i {}, er en matrix indesluttet i ().

Skærmbilledet nedenfor viser resultaterne af de to koder.

1 kanal repo download
PowerShell Hashtable vs PowerShell Array

Den del af skærmbilledet, der er mærket (1), er resultatet af hashtabellen. Har du set nøgle/værdi-parret?

I ovenstående eksempel har nøglen Root værdien C:UsersvictoDocuments. Desuden har PSProvider-nøglen en værdi kaldet FileSystem.

Endelig har Navn værdien Dokument.

Desuden har den del af skærmbilledet, der er mærket (2), resultatet af array-koden. Som forklaret tidligere, er det kun en liste.

PowerShell hashbare metoder og egenskaber

PowerShell hashbare metoder og egenskaber

I introduktionen lovede jeg at tage dig med bag motorhjelmen på PowerShell Hashtables. Dette er det!

I dette afsnit vil jeg lære dig, hvordan du bruger Get-Member Cmdlet'en til at se bag hashtabeller.

Når du piper resultatet af en PowerShell Hashtable til Få-medlem , vil du være i stand til at gennemgå de tilgængelige Metoder og Ejendomme af Hashtablen.

Lad os vende tilbage til vores første hastige eksempel ovenfor:

|_+_|

Kopier koden til et nyt PowerShell ISE-dokument. Kør derefter koden.

Derefter for at se tilgængelig Metoder og Ejendomme i denne hashtabel, kør denne kommando på den samme PowerShell ISE.

|_+_|

For at køre ovenstående kommando skal du indsætte den under den sidste kode. Fremhæv det derefter, og tryk enten på F8 eller klik på det fremhævede ikon.

PowerShell hashbare metoder og egenskaber

Kommandoen viser resultaterne i PowerShell-konsolruden.

For nu, se oven på resultatet. Den har Typenavn: System.Collections.Hashtable.

Dette bekræfter, at objekterne, der føres ind i Get-Member Cmdlet'en, er en hashtabel!

I de følgende underafsnit af dette afsnit vil jeg vise dig, hvordan du bruger de almindelige metoder og egenskaber for en PowerShell-hashtabel.

Sådan tilføjer eller fjerner du elementer til eksisterende hashtable

I dette afsnit lærer du at tilføje nye elementer til en eksisterende PowerShell-hashtabel. Desuden vil du også lære, hvordan du fjerner et element fra en eksisterende PowerShell-hashtabel.

Inden jeg dykker ned i det, vil jeg nævne, at du også kan oprette en tom hashtabel. Tilføj derefter nøgler/værdier til hashtabellen - mere om dette senere.

Tilbage til at tilføje eller fjerne elementer til eksisterende PowerShell hasables – da vi kørte $hashtable | Få-medlem kommando, er en af ​​metoderne vist i resultatet Tilføje . Der er også en metode, Fjerne .

Se de fremhævede dele af skærmbilledet nedenfor:

PowerShell hashbare metoder og egenskaber

Før jeg viser dig, hvordan du bruger disse to metoder, lad os se på den originale PowerShell hashtable kode:

|_+_|

Hashtabellen har 3 poster. I dette eksempel vil jeg tilføje en anden nøgle kaldet Beskrivelse med værdien Maps til min 'Mine dokumenter'-mappe.

For at fuldføre denne opgave vil jeg køre kommandoen nedenfor (på den samme PowerShell ISE-konsol, som jeg kørte de tidligere kommandoer)

|_+_| Bemærk, hvordan jeg brugte Tilføj Metode . Jeg tilføjer et punktum (.) ud for den variabel, der indeholder hashtabellen. Så inkluderede jeg metoden, Tilføje , efterfulgt af (). Til sidst inkluderede jeg det nye nøgle/værdi-par, som jeg vil tilføje til hashtabellen.

Når du har kørt kommandoen, skal du fremhæve, at den ekstra nøgle er blevet tilføjet $hashtable og tryk på F8.

|_+_|

Her er et skærmbillede af resultatet - der bekræfter, at den nye nøgle/værdi er tilføjet.

Når du går videre, kan du bruge den samme tilgang til at fjerne en værdi fra en PowerShell-hashtabel.

For at fjerne den sidste nøgle, vi føjede til hashtabellen, skal du køre en kommando, der ligner den sidste kommando. Denne gang dog erstatte Tilføje Metode med Fjerne Metode.

Her er kommandoen:

|_+_| Det Fjerne Metoden omfatter kun nøgle . Du behøver ikke at inkludere nøglen værdi i kommandoen.

Kør først ovenstående kommando. Fremhæv derefter for at bekræfte, at nøglen blev fjernet $hashtable og tryk på F8.

|_+_|

Resultatet af kommandoen bekræfter, at nøglen er blevet fjernet!

PowerShell-hashtable-metoder og -egenskaber - Sådan tilføjer eller fjerner du elementer til eksisterende hashtable

Sådan kontrollerer du, om en PowerShell-hashtable indeholder en nøgle

Da vi rørte hasablen nedenfor til Få-medlem Cmdlet, en af ​​de viste metoder er Indeholder nøgle Metode – se skærmbilledet nedenfor.

|_+_|

Det Indeholder nøgle Metoden kan bruges på så mange måder. En af de almindelige anvendelser af denne metode er dog at bruge den til at kontrollere, om der findes en nøgle i en hashtabel, og hvis den ikke gør det, skal du tilføje nøglen.

ud af html5 lagerplads

En anden anvendelse af Indeholder nøgle Metoden til en PowerShell-hashtabel er blot at bruge den til at kontrollere, om der findes et nøglenavn i hashtabellen.

For at kontrollere, om der findes en nøgle i en PowerShell-hashtabel ved hjælp af Indeholder nøgle Metode, kør kommandoen nedenfor:

|_+_|

Denne kommando kontrollerer, om en nøgle med navnet Beskrivelse findes i hashtabellen gemt i $hashtable-variablen. Resultatet af kommandoen viser False.

PowerShell-hashtable-metoder og -egenskaber - Sådan kontrollerer du, om en PowerShell-hashtable indeholder en nøgle

For at kontrollere, om beskrivelsenøglen findes, før vi tilføjer den til PowerShell-hashtablen, skal vi bruge en ekstra linje med koder til den forrige kommando.

Her er den forbedrede kode.

|_+_|

Koden bruger den betingede IF-sætning til at kontrollere, om der findes en nøgle med navnet Beskrivelse i hashtabellen.

Så, hvis resultatet er falsk, bruger vi i kommandoudførelsesdelen af ​​IF-sætningen Tilføje Metode for PowerShell-hashtablen til at tilføje nøglen til hashtabellen.

Men hvis nøglen findes i hashtabellen, i den anden del af IF-sætningen, viser vi en meddelelse, der informerer den person, der kørte kommandoen, om, at nøglen allerede eksisterer.

Efter at have kørt den sidste kommando, skal du fremhæve $hashtable variabel og køre den alene. Resultatet bekræfter, at nøglen Beskrivelse blev tilføjet til variablen, fordi den ikke eksisterede.

For at teste om dette script virker - kør det igen...

|_+_|

Denne gang tilføjede scriptet ikke nøglen. Det returnerede snarere oplysningerne i den anden del af IF-erklæringen - Nøglen findes allerede i hashtabellen .

PowerShell-hashtable-metoder og -egenskaber - Sådan kontrollerer du, om en PowerShell-hashtable indeholder en nøgle

Sådan konverteres en PowerShell-hashtable til streng

Det første trin til at konvertere en PowerShell Hashtable til en streng er at returnere værdierne af nøglerne i hashtabellen. Med andre ord konverterer du PowerShell hashtabellen til en PowerShell Array.

For at returnere værdierne i en hashtabel skal du ringe til Værdier hashtabellens ejendom.

Her er kommandoen, der returnerer værdierne i en hashtabel:

|_+_|

Når du har returneret værdierne i en PowerShell hashtabel, er næste trin at overføre $hashtable.Values ​​til Out-String Kommando…

|_+_| Senere i denne guide vil du forstå vigtigheden af ​​at konvertere en PowerShell hashtabel til en streng. For at se den praktiske anvendelse af dette i et virkeligt SysAdmin-script, skal du læse videre.

Sådan bruges PowerShell Hashtable GetTæller Metode

En anden vigtig metode til en PowerShell hashtabel er GetTæller Metode.

Du kan bruge denne metode til at adskille nøglerne i en hashtabel i individuelle strenge. Her er et eksempel på kommandoen GetTæller Metode til en hashtabel:

|_+_|

Som du kan se fra resultatet af ovenstående kommando, returneres nøglerne og værdierne i individuelle overskrifter. Jeg kan ikke komme i tanke om et program nu, men hvis du nogensinde har brug for at opdele nøglerne i en PowerShell hashtabel, ved du hvordan du gør det!

Sådan tælles PowerShell hashbare genstande

Der er endnu en nyttig hashbar ejendom, Tælle . Som navnet antyder, returnerer denne egenskab antallet af nøgler i en hashtabel.

Ligesom Værdier Property, for at kalde Count Property, brug en kommando, der ligner den nedenfor:

|_+_|

Kommandoen bekræfter, at hashtabellen, $hashtable har 4 nøgler.

Sådan tælles PowerShell hashbare genstande

Sådan opretter du en tom PowerShell-hashtable og tilføjer nøgler

Sådan opretter du en tom PowerShell-hashtable og tilføjer nøgler

Indtil videre har alle eksemplerne i denne S-zone fokuseret på at manipulere PowerShell-hashtable med eksisterende nøgler. I dette afsnit lærer du, hvordan du opretter en tom hashtabel.

Tilføj derefter nøgler til hashtabellen.

For at oprette en tom PowerShell-hashtabel skal du blot indtaste @ tegn efterfulgt af {} beslag. Her er et eksempel på en tom hashtabel gemt i en variabel, Tom hashtabel :

|_+_|

For at bekræfte, at hashtabellen er oprettet uden værdier, skal du køre den forrige kommando. Kør derefter variablen alene.

|_+_|

Det næste trin er at bruge Tilføje metode, dækket tidligere i denne vejledning, for at tilføje nøgler/værdier til hashtabellen. I dette eksempel vil jeg tilføje en nøgle, kaldet Navn , med en værdi på Dokument .

https

Her er kommandoen til at udføre denne opgave.

|_+_|

Til sidst, for at bekræfte, at værdierne blev tilføjet med succes, skal du køre variablen, $Emptyhashtable:

|_+_|

Den sidste kommando bekræfter, at værdierne blev tilføjet med succes:

Sådan opretter du PowerShell-hashtable med flere værdier og én nøgle

Sådan opretter du PowerShell-hashtable med flere værdier og én nøgle

I alle de eksempler, vi har dækket indtil videre, har PowerShell hashtabellen ét nøgle/værdi-par. Der er dog omstændigheder, hvor du muligvis skal have en enkelt nøgle i en hashtabel med flere værdier.

I dette tilfælde ønsker du effektivt at oprette en hashtabel med arrays som værdier.

Til at begynde med synes jeg, det er bedre at vise dig de koder, jeg brugte til at skelne en hashtabel fra en matrix.

|_+_| |_+_|

Så for at oprette en PowerShell-hashtabel med enkelte nøgler og flere værdier skal du køre et script, der ligner dette:

|_+_|

I scriptet ovenfor, Lognavn er hash-nøglen, mens værdierne System, Application og Security er tildelt nøglen. Faktisk har vi skabt en enkelt hastig nøgle med flere værdier.

For at liste de individuelle værdier i Lognavn nøgle, kør kommandoen nedenfor:

|_+_|

Den del af skærmbilledet nedenfor mærket (1) er resultatet af hashtabellen, $hashtableWithArrays . Desuden viser portionen mærket (2) resultatet af $hashtableWithArrays.Values kommando.

Hvis du er bekendt med Windows Event Logs – System, Application og Security – er navne på Windows hændelseslogfiler.

I næste afsnit vil jeg vise dig, hvordan du bruger PowerShell ForEach-løkke til at iterere gennem ovenstående hashtabel – og køre Hent-EventLog kommando på disse 3 hændelseslogfiler – ved hjælp af et enkelt PowerShell-script.

Sådan gentages PowerShell Hashtable med ForEach Loop

Sådan gentages PowerShell Hashtable med ForEach

I det sidste afsnit oprettede jeg en enkelt-nøgle PowerShell hashtabel med flere værdier.

For eksemplet i dette afsnit har jeg ændret den variabel, der gemte hashtabellen til Lognavnenøgler . Her er det opdaterede script.

|_+_|

I dette afsnit vil jeg lære dig, hvordan du bruger For hver at gå gennem de værdier, der er gemt i Lognavn nøgle og kør Hent-EventLog kommando.

For et hurtigt genopfriskningskursus om PowerShell ForEach, nedenfor er den generelle syntaks for en PowerShell ForEach-kommando:

|_+_|

Hvis du anvender ovenstående syntaks på vores Lognavne hashable, vil den opdaterede kommando se sådan ud:

Linjerne, der starter med #, er PowerShell-kommentarer. |_+_|

Den første del af scriptet er det samme script, der opretter PowerShell-hashtablen med en enkelt nøgle med flere værdier. Her er scriptet:

|_+_|

I anden del af scriptet konverterede jeg værdierne gemt i ($LogNameKeys.Values) til strenge og gemte resultatet i en anden variabel, LogNameKeysAsStrings .

|_+_|

Til sidst, i den tredje del af scriptet – ForEach-løkken introduceres:

skype, hvordan man kan slippe af med annoncer
|_+_|

I denne del af scriptet fortæller vi PowerShell at tage hver værdi gemt i Lognavn nøgle ( $LogNameKeysAsStrings ) – gem den individuelle værdi midlertidigt i variablen Lognavnnøgle – brug derefter den tidsmæssige variabel til at køre Hent-EventLog kommando.

Jeg inkluderede Nyeste parameter for Hent-EventLog kommando med en værdi på 5, så kommandoen returnerer de sidste 5 poster i hver hændelseslog. Når du ser på et PowerShell-script, kan det se kompliceret ud. Men ser man godt efter, er det som regel meget nemt.

Kopier nu scriptet nedenfor til et nyt PowerShell ISE-dokument og kør det.

Åbn PowerShell ISE som administrator. Hvis du ikke åbner PowerShell ISE som administrator, vil du modtage adgangsfejlmeddelelser. |_+_|

Skærmbilledet nedenfor viste resultatet af scriptet. Der er 15 rækker i resultatruden – der repræsenterer 5 af system-, applikations- og sikkerhedshændelseslogfiler.

Sådan tilpasser du en rapport med PowerShell Hashtable og Select-Object

Sådan tilpasser du en rapport med PowerShell Hashtable og Select-Object

I det sidste afsnit oprettede vi et PowerShell-script, der trækker Windows-hændelseslograpporten. Her er et skærmbillede af rapporten

Standardoutputtet af scriptet har 5 kolonner – Indeks , Tid , EntryType , Kilde , Forekomst-ID , og Besked . Hvis du sender dette som en rapport, vil du måske ændre disse kolonnenavne til navne, der er let forståelige.

Her er manuskriptet fra sidste afsnit.

Scriptet er blevet ændret en smule. Jeg har nu en variabel, EventLogReport der gemmer output fra ForEach-løkken. Jeg vil forklare, hvorfor dette er nødvendigt senere. |_+_|

For at ændre kolonneoverskriftens navne fra dette script, vil vi pipe Hent-EventLog kommando til en Vælg-objekt kommando.

hvordan man vinker tilbage

Opret derefter en PowerShell-hashtabel i Vælg-objekt kommando, der ændrer kolonnenavnene. Her er det modificerede script, der udfører magien.

|_+_|

Manuskriptet fremstår meget mere komplekst, end det i virkeligheden er. Men hvis du fokuserer på den del af scriptet efter Select-Object, vil det være let at se forskellen mellem dette script og den tidligere kopi.

Specifikt inkluderede jeg hashtabeller i Vælg-objekt blok af koden. Hver hashtabel tilpasser outputtet af Hent-EventLog kommando.

Her er et eksempel på hashtabel fra Vælg-objekt blok:

|_+_|

Som sædvanlig har PowerShell hashtabellen to elementer. Nøglen er Navn , værdien er Udtryk .

En anden vigtig ting at bemærke er, at i slutningen af ​​hver hashtabel i Vælg-objekt blok, er der et komma (,).

Endelig er her resultatet af det endelige script i PowerShell:

Tidligere lovede jeg at forklare, hvorfor jeg introducerede $EventLogReport variabel for at gemme output fra ForEach-løkken. Uden denne variabel vil det endelige resultat vise 3 individuelle resultater for hver af de 3 hændelseslogfiler. Men ved at gemme hele resultaterne i en variabel, var jeg i stand til at overføre denne variabel til Format-Table - dette viser hele resultatet som en enkelt tabel. Her er kommandoen, der udførte magien. |_+_|

Sådan eksporteres PowerShell Hashtable til CSV

Sådan eksporteres PowerShell Hashtable til CSV

I dette sidste afsnit lærer du, hvordan du eksporterer en PowerShell-hashtabel til CSV.

I mit første eksempel for dette afsnit vil jeg vise dig, hvordan du eksporterer denne hashtabe til CSV.

|_+_|

For at eksportere denne PowerShell-hashtable til en CSV-fil, skal du bruge GetTæller Metode (diskuteret tidligere) til at liste værdierne. Ellers vil de faktiske nøgle/værdi-par ikke blive eksporteret.

Her er det ændrede script, der eksporterer hashtabellen gemt i hashtabel variabel til en CSV-fil.

|_+_|

I introducerede scriptet nedenfor:

|_+_|

Manuskriptet indeholder GetTæller Metode i hashtabellen. Derefter rører outputtet til Vælg-objekt kommando.

Til sidst rører jeg outputtet fra Vælg-objekt kommando til Eksport-Csv kommando. For at læse mere om, hvordan du bruger Eksport-Csv Cmdlet, læs vores guide – Powershell NoTypeInformation: Applications and Eksempler .

Når du kører dette script, opretter det en CSV-fil kaldet hashtable.csv , i den sti, du har angivet. Se skærmbilledet nedenfor for output af CSV-filen.

|_+_|

I mit andet eksempel vil jeg eksportere outputtet af det script, vi oprettede i det sidste afsnit – hændelseslogscriptet – til en CSV-fil.

Her er manuskriptet. For at eksportere rapporten til CSV tilføjede jeg koden under denne i slutningen af ​​dette script.

|_+_| |_+_|

Koden sender outputtet fra For hver loop – gemt i EventLogReport variabel – til Eksport-Csv kommando . Den genererede CSV-fil er vist på skærmbilledet nedenfor.

Det er det – en omfattende guide om PowerShell hashable! Jeg håber du fandt det nyttigt?

Hvis du fandt det nyttigt, så stem venligst Ja til spørgsmålet Var dette indlæg nyttigt nedenfor.

Alternativt kan du stille et spørgsmål, efterlade en kommentar eller give mere feedback med formularen Efterlad et svar, som findes i slutningen af ​​denne side.

Endelig, for flere PowerShell tech S Zones, besøg vores Windows PowerShell How-To guide-side. Du kan også finde vores Work from Home-side meget nyttig.

Referencer og videre læsning

  1. Alt hvad du ville vide om hashtabeller
  2. Kombiner arrays og Hash-tabeller i PowerShell for sjov og overskud
  3. Om Hash-tabeller