PowerShell Hashtable Ultimate Guide med eksempler

20. mai 2021 5546 Visninger PowerShell Hashtable din ultimate guide med eksempler

En PowerShell-hashtable er en samling av gjenstander og deres verdier. Varene omtales som nøkler. Dessuten har hver nøkkel i en hashtabell en tilsvarende verdi.





I hovedsak er en PowerShell-hashtable en nøkkel-/verdilager-'tabell'.



I denne S-sonen vil jeg lære deg alt du trenger å vite om PowerShell hashtabeller. Den første delen utforsker forskjellen mellom en Hashtable og en Array.

Deretter, i den andre delen, bruker du Få-medlem Cmdlet, jeg tar deg med bak panseret på hashtabeller.



Til slutt vil jeg utforske forskjellige måter å bruke hashtabeller i skripting.



Bla gjennom innleggsemner

PowerShell Hashtable vs PowerShell Array

PowerShell Hashtable vs PowerShell Array

Før jeg dykker inn i Hashtables, vil jeg forklare forskjellen mellom Hashtables og Arrays. Denne differensieringen er viktig ettersom de to begrepene lett kan forveksles.



I introduksjonen til denne guiden forklarte jeg at en hashtabell er en nøkkel-/verdibutikk. I tillegg er en hashtabell som en tabell med nøkler og verdier.



Tvert imot, en PowerShell Array er en samling av verdier eller objekter.

Den primære forskjellen mellom en PowerShell-hashtable og en PowerShell-matrise er at en hashtabell er en samling av elementer (nøkler) og deres verdier - mens en matrise bare er en liste over elementer.

For et raskt eksempel er kodene nedenfor eksempler på en hashtabell og en matrise – den første koden lager en hashtabell mens den andre koden lager en matrise:

|_+_| |_+_| Fra kodeeksemplene kan du se at mens en hashtabell er omsluttet av {}, er en matrise omsluttet av ().

Skjermbildet nedenfor viser resultatene av de to kodene.

hvordan få høyere dampnivå
PowerShell Hashtable vs PowerShell Array

Den delen av skjermbildet merket (1) er resultatet av hashtabellen. Har du sett nøkkel/verdi-paret?

I eksemplet ovenfor, nøkkelen, Root har verdien C:UsersvictoDocuments. Dessuten har PSProvider-nøkkelen en verdi kalt FileSystem.

Til slutt har Navn verdien Dokument.

Videre har den delen av skjermbildet merket (2) resultatet av array-koden. Som forklart tidligere, er det bare en liste.

PowerShell hashbare metoder og egenskaper

PowerShell hashbare metoder og egenskaper

I introduksjonen lovet jeg å ta deg med bak panseret til PowerShell Hashtables. Det var det!

I denne delen vil jeg lære deg hvordan du bruker Get-Member Cmdlet for å se bak hashtabeller.

Når du piper resultatet av en PowerShell Hashtable til Få-medlem , vil du kunne se gjennom tilgjengelige Metoder og Egenskaper av hashtabellen.

La oss gå tilbake til vårt første hastige eksempel ovenfor:

|_+_|

Kopier koden til et nytt PowerShell ISE-dokument. Kjør deretter koden.

Deretter, for å se tilgjengelig Metoder og Egenskaper i denne hashtabellen, kjør denne kommandoen på samme PowerShell ISE.

|_+_|

For å kjøre kommandoen ovenfor, lim den inn under den siste koden. Deretter markerer du den og trykker enten på F8 eller klikker på det uthevede ikonet.

PowerShell hashbare metoder og egenskaper

Kommandoen vil vise resultater i PowerShell-konsollpanelet.

For nå, se på toppen av resultatet. Den har TypeName: System.Collections.Hashtable.

Dette bekrefter at objektene som sendes inn i Get-Member Cmdlet er en hashtabell!

I de følgende underdelene av denne delen vil jeg vise deg hvordan du bruker de vanlige metodene og egenskapene til en PowerShell-hashtable.

Slik legger du til eller fjerner elementer til eksisterende hashtabell

I denne delen lærer du å legge til nye elementer i en eksisterende PowerShell-hashtable. Dessuten vil du også lære hvordan du fjerner et element fra en eksisterende PowerShell-hashtable.

Før jeg dykker ned i det, vil jeg nevne at du også kan lage en tom hashtabell. Legg deretter til nøkler/verdier i hashtabellen – mer om dette senere.

Tilbake til å legge til eller fjerne elementer til eksisterende PowerShell-hurtigprogram – da vi kjørte $hashtable | Få-medlem kommando, er en av metodene som vises i resultatet Legg til . Det er også en metode, Fjerne .

Se de uthevede delene av skjermbildet nedenfor:

PowerShell hashbare metoder og egenskaper

Før jeg viser deg hvordan du bruker disse to metodene, la oss se på den originale PowerShell hashable-koden:

|_+_|

Hasttabellen har 3 oppføringer. I dette eksemplet vil jeg legge til en annen nøkkel kalt Beskrivelse med verdien Maps i mappen Mine dokumenter.

For å fullføre denne oppgaven vil jeg kjøre kommandoen nedenfor (på den samme PowerShell ISE-konsollen som jeg kjørte de forrige kommandoene)

|_+_| Legg merke til hvordan jeg brukte Add Metode . Jeg legger til et punktum (.) ved siden av variabelen som inneholder hashtabellen. Så inkluderte jeg metoden, Legg til , etterfulgt av (). Til slutt inkluderte jeg det nye nøkkel/verdi-paret som jeg vil legge til hashtabellen.

Når du har kjørt kommandoen, for å bekrefte at tilleggsnøkkelen er lagt til, marker $hashtable og trykk F8.

|_+_|

Her er et skjermbilde av resultatet – som bekrefter at den nye nøkkelen/verdien er lagt til.

Når du går videre, kan du bruke samme tilnærming for å fjerne en verdi fra en PowerShell-hashtabel.

For å fjerne den siste nøkkelen vi la til hashtabellen, kjør en kommando som ligner på den siste kommandoen. Denne gangen, men erstatte Legg til Metode med Fjerne Metode.

Her er kommandoen:

|_+_| De Fjerne Metoden inkluderer bare nøkkel . Du trenger ikke å inkludere nøkkelen verdi i kommandoen.

Kjør først kommandoen ovenfor. Deretter, for å bekrefte at nøkkelen ble fjernet, uthev $hashtable og trykk F8.

|_+_|

Resultatet av kommandoen bekrefter at nøkkelen er fjernet!

PowerShell hashable metoder og egenskaper - hvordan legge til eller fjerne elementer til eksisterende hashable

Hvordan sjekke om en PowerShell-hashtable inneholder en nøkkel

Når vi rørte hasable nedenfor til Få-medlem Cmdlet, en av metodene som vises er Inneholder nøkkel Metode – se skjermbildet nedenfor.

|_+_|

De Inneholder nøkkel Metoden kan brukes på så mange måter. Imidlertid er en av de vanlige applikasjonene for denne metoden å bruke den til å sjekke om en nøkkel finnes i en hashtabell, og hvis den ikke gjør det, legg til nøkkelen.

se profilen din som en annen facebook

En annen anvendelse av Inneholder nøkkel Metoden for en PowerShell-hashtabel er å ganske enkelt bruke den til å sjekke om det finnes et nøkkelnavn i hashtabellen.

For å sjekke om det finnes en nøkkel i en PowerShell-hashtabel ved å bruke Inneholder nøkkel Metode, kjør kommandoen nedenfor:

|_+_|

Denne kommandoen sjekker om en nøkkel med navnet Beskrivelse finnes i hashtabellen lagret i $hashtable-variabelen. Resultatet av kommandoen viser False.

PowerShell hashable metoder og egenskaper - hvordan sjekke om en PowerShell hashable inneholder en nøkkel

For å sjekke om Beskrivelse-nøkkelen eksisterer før du legger den til PowerShell-hashtablen, trenger vi en ekstra linje med koder til den forrige kommandoen.

Her er den forbedrede koden.

|_+_|

Koden bruker IF-betinget setning for å sjekke om det finnes en nøkkel med navnet Beskrivelse i hashtabellen.

Så, hvis resultatet er False, bruker vi i kommandoutførelsesdelen av IF-setningen Legg til Metode for PowerShell-hashtablen for å legge til nøkkelen til hashtabellen.

Men hvis nøkkelen finnes i hashtabellen, i Else-delen av IF-setningen, viser vi en melding som informerer personen som kjørte kommandoen om at nøkkelen allerede eksisterer.

Etter å ha kjørt den siste kommandoen, marker $hashtable variabel og kjøre den alene. Resultatet bekrefter at nøkkelen Beskrivelse ble lagt til variabelen fordi den ikke eksisterte.

For å teste om dette skriptet fungerer – kjør det igjen...

|_+_|

Denne gangen la manuset ikke til nøkkelen. Snarere returnerte den informasjonen i Else-delen av IF-erklæringen - Nøkkelen finnes allerede i hashtabellen .

PowerShell hashable metoder og egenskaper - hvordan sjekke om en PowerShell hashable inneholder en nøkkel

Hvordan konvertere en PowerShell-hashtable til streng

Det første trinnet for å konvertere en PowerShell Hashtable til en streng er å returnere verdiene til nøklene i hashtabellen. Med andre ord, du konverterer PowerShell-hashtablen til en PowerShell-array.

For å returnere verdiene i en hashtabell, ring Verdier egenskapen til hashtabellen.

Her er kommandoen som returnerer verdiene i en hashtabell:

|_+_|

Når du har returnert verdiene i en PowerShell hashtabell, er neste trinn å overføre $hashtable.Values ​​til Out-String Kommando…

|_+_| Senere i denne veiledningen vil du sette pris på viktigheten av å konvertere en PowerShell-hashtable til en streng. Les videre for å se den praktiske anvendelsen av dette i en virkelig SysAdmin-skripting.

Slik bruker du PowerShell Hashtable Get Enumerator Metode

En annen viktig metode for en PowerShell-hashtabel er Get Enumerator Metode.

Du kan bruke denne metoden til å skille nøklene i en hashtabell i individuelle strenger. Her er et eksempel på kommandoen Get Enumerator Metode for en hashtabell:

|_+_|

Som du kan se fra resultatet av kommandoen ovenfor, returneres nøklene og verdiene i individuelle overskrifter. Jeg kan ikke tenke på et program nå, men hvis du noen gang trenger å bryte opp nøklene i en PowerShell hashtabell, vet du hvordan du gjør det!

Hvordan telle PowerShell hashbare elementer

Det er enda en nyttig hashbar eiendom, Telle . Som navnet tilsier, returnerer denne egenskapen antall nøkler i en hashtabell.

Som Verdier Property, for å kalle Count Property, bruk en kommando som ligner på den nedenfor:

|_+_|

Kommandoen bekrefter at hashtabellen, $hashtable har 4 nøkler.

Hvordan telle PowerShell hashbare elementer

Hvordan lage en tom PowerShell-hashtable og legge til nøkler

Hvordan lage en tom PowerShell-hashtable og legge til nøkler

Så langt har alle eksemplene i denne S-sonen fokusert på å manipulere PowerShell-hashtable med eksisterende nøkler. I denne delen lærer du hvordan du oppretter en tom hashtabell.

Deretter legger du til nøkler til hashtabellen.

For å lage en tom PowerShell hashtabell, skriv ganske enkelt inn @ tegn, etterfulgt av {} parentes. Her er et eksempel på en tom hashtabell lagret i en variabel, Emptyhashtable :

|_+_|

For å bekrefte at hashtabellen er opprettet uten verdier, kjør den forrige kommandoen. Kjør deretter variabelen på egen hånd.

|_+_|

Det neste trinnet er å bruke Legg til metode, dekket tidligere i denne veiledningen, for å legge til nøkler/verdier til hashtabellen. I dette eksemplet vil jeg legge til en nøkkel, kalt Navn , med en verdi på Dokument .

hvordan lage et makrotastatur

Her er kommandoen for å utføre denne oppgaven.

|_+_|

Til slutt, for å bekrefte at verdiene ble lagt til, kjør variabelen $Emptyhashtable:

|_+_|

Den siste kommandoen bekrefter at verdiene ble lagt til:

Hvordan lage PowerShell-hashtable med flere verdier og én nøkkel

Hvordan lage PowerShell-hashtable med flere verdier og én nøkkel

I alle eksemplene vi har dekket så langt, har PowerShell-hashtablen ett nøkkel/verdi-par. Det er imidlertid omstendigheter når du kan trenge å ha en enkelt nøkkel i en hashtabell med flere verdier.

I dette tilfellet vil du effektivt lage en hashtabell med arrays som verdier.

Til å begynne med tror jeg det er bedre å vise deg kodene jeg brukte for å skille en hashtabell fra en matrise.

|_+_| |_+_|

Så for å lage en PowerShell-hashtable med enkeltnøkler og flere verdier, kjør et skript som ligner på dette:

|_+_|

I manuset ovenfor, Loggnavn er hash-nøkkelen mens verdiene System, Application og Security er tilordnet nøkkelen. Effektivt har vi laget en enkelt hastig nøkkel med flere verdier.

For å liste de individuelle verdiene i Loggnavn tast, kjør kommandoen nedenfor:

|_+_|

Den delen av skjermbildet nedenfor merket (1) er resultatet av hashtabellen, $hashtableWithArrays . Dessuten viser delen merket (2) resultatet av $hashtableWithArrays.Values kommando.

Hvis du er kjent med Windows Event Logs – System, Application og Security – er navnene på Windows hendelseslogger.

I neste avsnitt vil jeg vise deg hvordan du bruker PowerShell ForEach-løkken til å iterere gjennom hashtabellen ovenfor – og kjøre Get-EventLog kommando på disse 3 hendelsesloggene – ved å bruke et enkelt PowerShell-skript.

Slik itererer du PowerShell Hashtable med ForEach Loop

Slik itererer du PowerShell Hashtable med ForEach

I den siste delen opprettet jeg en enkeltnøkkel PowerShell-hashtable med flere verdier.

For eksempelet i denne delen har jeg endret variabelen som lagret hashtabellen til Loggnavnnøkler . Her er det oppdaterte manuset.

|_+_|

I denne delen vil jeg lære deg hvordan du bruker For hver å gå gjennom verdiene som er lagret i Loggnavn nøkkel og kjør Get-EventLog kommando.

For et raskt oppfriskningskurs om PowerShell ForEach, nedenfor er den generelle syntaksen til en PowerShell ForEach-kommando:

|_+_|

Hvis du bruker syntaksen ovenfor på vår Loggnavn hashable, vil den oppdaterte kommandoen se slik ut:

Linjene som starter med # er PowerShell-kommentarer. |_+_|

Den første delen av skriptet er det samme skriptet som oppretter PowerShell-hashtablen med én nøkkel med flere verdier. Her er manuset:

|_+_|

I den andre delen av skriptet konverterte jeg verdiene lagret i ($LogNameKeys.Values) til strenger og lagret resultatet i en annen variabel, LogNameKeysAsStrings .

|_+_|

Til slutt, i den tredje delen av manuset – ForEach-løkken introduseres:

Chrome deaktiver nedlastingslinjen
|_+_|

I denne delen av skriptet ber vi PowerShell om å ta hver verdi som er lagret i Loggnavn nøkkel ( $LogNameKeysAsStrings ) – lagre den individuelle verdien midlertidig i variabelen Loggnavnnøkkel – bruk deretter den tidsmessige variabelen for å kjøre Get-EventLog kommando.

Jeg inkluderte Nyeste parameteren til Get-EventLog kommando med en verdi på 5 slik at kommandoen returnerer de siste 5 oppføringene i hver hendelseslogg. Når du ser på et PowerShell-skript kan det se komplisert ut. Men hvis du ser nøye etter, er det vanligvis veldig enkelt.

Kopier nå skriptet nedenfor til et nytt PowerShell ISE-dokument og kjør det.

Åpne PowerShell ISE som administrator. Hvis du ikke åpner PowerShell ISE som administrator, vil du motta tilgangsfeilmeldinger. |_+_|

Skjermbildet nedenfor viste resultatet av skriptet. Det er 15 rader i resultatruten – som representerer 5 av system-, applikasjons- og sikkerhetshendelseslogger.

Hvordan tilpasse en rapport med PowerShell Hashtable og Select-Object

Hvordan tilpasse en rapport med PowerShell Hashtable og Select-Object

I den siste delen laget vi et PowerShell-skript som henter Windows-hendelsesloggrapporten. Her er et skjermbilde av rapporten

Standardutgangen til skriptet har 5 kolonner – Indeks , Tid , EntryType , Kilde , Forekomst-ID , og Beskjed . Hvis du sender dette som en rapport, kan det være lurt å endre disse kolonnenavnene til navn som er lett forståelige.

Her er manuset fra den siste delen.

Manuset er litt modifisert. Jeg har nå en variabel, EventLogReport som lagrer utdataene fra ForEach-løkken. Jeg vil forklare hvorfor dette er nødvendig senere. |_+_|

For å endre kolonneoverskriftsnavnene fra dette skriptet, vil vi pipe Get-EventLog kommando til a Velg-objekt kommando.

hvordan du deaktiverer soundcloud-kontoen

Deretter oppretter du en PowerShell-hashtable i Velg-objekt kommando som endrer kolonnenavnene. Her er det modifiserte manuset som utfører magien.

|_+_|

Manuset fremstår som mye mer komplekst enn det egentlig er. Men hvis du fokuserer på delen av skriptet etter Select-Object, vil det være lett å se forskjellen mellom dette skriptet og den tidligere kopien.

Spesielt inkluderte jeg hashtabeller i Velg-objekt blokk av koden. Hver hashtabell tilpasser utdataene til Get-EventLog kommando.

Her er et eksempel på hashtabell fra Velg-objekt blokkere:

|_+_|

Som vanlig har PowerShell-hashtablen to elementer. Nøkkelen er Navn , er verdien Uttrykk .

En annen viktig ting å merke seg er at på slutten av hver hashtabell i Velg-objekt blokk, det er et komma (,).

Til slutt, her er resultatet av det endelige skriptet i PowerShell:

Tidligere lovet jeg å forklare hvorfor jeg introduserte $EventLogReport variabel for å lagre utdataene fra ForEach-løkken. Uten denne variabelen vil det endelige resultatet vise 3 individuelle resultater for hver av de 3 hendelsesloggene. Men ved å lagre hele resultatene i en variabel, var jeg i stand til å overføre denne variabelen til Format-Table - dette viser hele resultatet som en enkelt tabell. Her er kommandoen som utførte magien. |_+_|

Hvordan eksportere PowerShell-hashtable til CSV

Hvordan eksportere PowerShell Hashtable til CSV

I denne siste delen lærer du hvordan du eksporterer en PowerShell-hashtable til CSV.

I mitt første eksempel for denne delen vil jeg vise deg hvordan du eksporterer denne hashtaben til CSV.

|_+_|

For å kunne eksportere denne PowerShell-hashtablen til en CSV-fil, må du bruke Get Enumerator Metode (diskutert tidligere) for å liste verdiene. Ellers vil ikke de faktiske nøkkel/verdi-parene bli eksportert.

Her er det modifiserte skriptet som eksporterer hashtabellen som er lagret i hashtabell variabel til en CSV-fil.

|_+_|

I introduserte skriptet nedenfor:

|_+_|

Manuset inkluderer Get Enumerator Metode i hashtabellen. Deretter rører utgangen til Velg-objekt kommando.

Til slutt piper jeg utgangen av Velg-objekt kommando til Eksporter-Csv kommando. For å lese mer om hvordan du bruker Eksporter-Csv Cmdlet, les guiden vår – Powershell NoTypeInformation: Programmer og eksempler .

Når du kjører dette skriptet, oppretter det en CSV-fil kalt hashtable.csv , i banen du spesifiserte. Se skjermbildet nedenfor for utdata av CSV-filen.

|_+_|

I mitt andre eksempel vil jeg eksportere utdataene fra skriptet vi opprettet i den siste delen – hendelsesloggskriptet – til en CSV-fil.

Her er manuset. For å eksportere rapporten til CSV la jeg til koden under denne på slutten av dette skriptet.

|_+_| |_+_|

Koden sender utdataene til For hver loop – lagret i EventLogReport variabel – til Eksporter-Csv kommando . Den genererte CSV-filen vises på skjermbildet nedenfor.

Det er det – en omfattende guide om PowerShell hashable! Jeg håper du fant det nyttig?

Hvis du synes det var nyttig, vennligst stem Ja til spørsmålet Var dette innlegget nyttig nedenfor.

Alternativt kan du stille et spørsmål, legge igjen en kommentar eller gi mer tilbakemelding med Legg igjen et svar-skjemaet på slutten av denne siden.

Til slutt, for flere PowerShell tech S Zones, besøk vår Windows PowerShell How-To guide-side. Du kan også finne vår Work from Home-side veldig nyttig.

Referanser og videre lesning

  1. Alt du ville vite om hashtabeller
  2. Kombiner matriser og hasjtabeller i PowerShell for moro og fortjeneste
  3. Om Hash-tabeller