PowerShell Hashtable Ultimate Guide med exempel

20 maj 2021 5546 Visningar PowerShell Hashtable din ultimata guide med exempel

En PowerShell hashtabell är en samling objekt och deras värden. Föremålen kallas nycklar. Dessutom har varje nyckel i en hashtabell ett motsvarande värde.





I huvudsak är en PowerShell-hashttabell en 'tabell' för nyckel-/värdelagring.



I denna S Zone kommer jag att lära dig allt du behöver veta om PowerShell hashtabeller. Det första avsnittet utforskar skillnaden mellan en hashtabell och en array.

Sedan, i det andra avsnittet, använder du Bli medlem Cmdlet, jag tar dig bakom huven på hashtabeller.



Slutligen kommer jag att utforska olika sätt att använda hashtabeller i skript.



Bläddra bland inläggsämnen

createtexture2d misslyckades med apex-legender

PowerShell Hashtable vs PowerShell Array

PowerShell Hashtable vs PowerShell Array

Innan jag dyker in i Hashtables vill jag förklara skillnaden mellan Hashtables och Arrays. Denna differentiering är viktig eftersom de två begreppen lätt kan förväxlas.



I inledningen till den här guiden förklarade jag att en hashtabell är en nyckel-/värdebutik. Dessutom är en hashtabell som en tabell med nycklar och värden.



Tvärtom, en PowerShell Array är en samling värden eller objekt.

Den primära skillnaden mellan en PowerShell-hashtabel och en PowerShell-array är att en hashtabell är en samling objekt (nycklar) och deras värden – medan en array bara är en lista över objekt.

För ett snabbt exempel är koderna nedan exempel på en hashtabell och en array – den första koden skapar en hashtabell medan den andra koden skapar en array:

|_+_| |_+_| Från kodexemplen kan du se att medan en hashtabell är innesluten i {}, är en array innesluten i ().

Skärmdumpen nedan visar resultaten av de två koderna.

PowerShell Hashtable vs PowerShell Array

Den del av skärmdumpen som är märkt (1) är resultatet av hashtabellen. Har du sett nyckel/värdeparet?

I exemplet ovan, nyckeln, Root har värdet C:UsersvictoDocuments. Dessutom har PSProvider-nyckeln ett värde som kallas FileSystem.

Slutligen har Namn värdet Dokument.

Dessutom har den del av skärmdumpen som är märkt (2) resultatet av arraykoden. Som förklarats tidigare är det bara en lista.

PowerShell hashbara metoder och egenskaper

PowerShell hashbara metoder och egenskaper

I inledningen lovade jag att ta dig bakom huven på PowerShell Hashtables. Detta är det!

I det här avsnittet kommer jag att lära dig hur du använder Get-Member Cmdlet för att titta bakom hashtabeller.

När du piper resultatet av en PowerShell Hashtable till Bli medlem , kommer du att kunna granska de tillgängliga Metoder och Egenskaper av hashtabellen.

Låt oss gå tillbaka till vårt första snabba exempel ovan:

|_+_|

Kopiera koden till ett nytt PowerShell ISE-dokument. Kör sedan koden.

Sedan för att se tillgängliga Metoder och Egenskaper i denna hashtabell, kör det här kommandot på samma PowerShell ISE.

|_+_|

För att köra kommandot ovan, klistra in det under den sista koden. Markera den sedan och tryck antingen på F8 eller klicka på den markerade ikonen.

PowerShell hashbara metoder och egenskaper

Kommandot visar resultat på PowerShell-konsolpanelen.

För nu, titta på toppen av resultatet. Den har TypeName: System.Collections.Hashtable.

Detta bekräftar att objekten som leds in i Get-Member Cmdlet är en hashtabell!

I följande underavsnitt av det här avsnittet kommer jag att visa dig hur du använder de vanliga metoderna och egenskaperna för en PowerShell-hashtabel.

Hur man lägger till eller tar bort objekt till befintlig hashtabell

I det här avsnittet lär du dig att lägga till nya objekt till en befintlig PowerShell-hashtabel. Dessutom kommer du också att lära dig hur du tar bort ett objekt från en befintlig PowerShell-hashtabel.

Innan jag dyker in i det vill jag nämna att du också kan skapa en tom hashtabell. Lägg sedan till nycklar/värden i hashtabellen – mer om detta senare.

Tillbaka till att lägga till eller ta bort objekt till befintliga PowerShell-hastables – när vi körde $hashtable | Bli medlem kommando, är en av metoderna som visas i resultatet Lägg till . Det finns också en metod, Avlägsna .

Se de markerade delarna av skärmdumpen nedan:

PowerShell hashbara metoder och egenskaper

Innan jag visar dig hur du använder dessa två metoder, låt oss titta på den ursprungliga PowerShell hashable-koden:

|_+_|

Hasttabellen har 3 poster. I det här exemplet kommer jag att lägga till en annan nyckel som heter Beskrivning med värdet Maps till min 'Mina dokument'-mapp.

För att slutföra denna uppgift kommer jag att köra kommandot nedan (på samma PowerShell ISE-konsol som jag körde de tidigare kommandona)

|_+_| Notera hur jag använde Add Metod . Jag lägger till en punkt (.) bredvid variabeln som innehåller hashtabellen. Sedan inkluderade jag metoden, Lägg till , följd av (). Slutligen inkluderade jag det nya nyckel/värdeparet som jag vill lägga till i hashtabellen.

När du har kört kommandot, för att bekräfta att den extra nyckeln har lagts till, markera $hashtable och tryck på F8.

|_+_|

Här är en skärmdump av resultatet – som bekräftar att den nya nyckeln/värdet har lagts till.

Om du går vidare kan du använda samma tillvägagångssätt för att ta bort ett värde från en PowerShell-hashtabel.

För att ta bort den senaste nyckeln vi lade till i hashtabellen, kör ett kommando som liknar det senaste kommandot. Den här gången ersätter dock Lägg till Metod med Avlägsna Metod.

Här är kommandot:

|_+_| De Avlägsna Metoden inkluderar endast nyckel- . Du behöver inte ha med nyckeln värde i kommandot.

Kör först kommandot ovan. Markera sedan för att bekräfta att nyckeln togs bort $hashtable och tryck på F8.

|_+_|

Resultatet av kommandot bekräftar att nyckeln har tagits bort!

PowerShell hashable metoder och egenskaper - hur man lägger till eller tar bort objekt till befintlig hashable

Hur man kontrollerar om en PowerShell-hashtable innehåller en nyckel

När vi rörde den hastable nedanför till Bli medlem Cmdlet, en av metoderna som visas är Innehåller nyckel Metod – se skärmdumpen nedan.

|_+_|

De Innehåller nyckel Metoden kan användas på så många sätt. En av de vanligaste tillämpningarna av denna metod är dock att använda den för att kontrollera om en nyckel finns i en hashtabell och om den inte gör det, lägg till nyckeln.

En annan tillämpning av Innehåller nyckel Metoden för en PowerShell-hashtabel är att helt enkelt använda den för att kontrollera om ett nyckelnamn finns i hashtabellen.

rekommendera en vän på facebook

För att kontrollera om det finns en nyckel i en PowerShell hashtabell med hjälp av Innehåller nyckel Metod, kör kommandot nedan:

|_+_|

Detta kommando kontrollerar om en nyckel med namnet Beskrivning finns i hashtabellen sparad i $hashtable-variabeln. Resultatet av kommandot visar False.

PowerShell Hashtable metoder och egenskaper - Hur man kontrollerar om en PowerShell Hashtable innehåller en nyckel

För att kontrollera om beskrivningsnyckeln finns innan vi lägger till den i PowerShell-hashtabellen, behöver vi en extra rad med koder till föregående kommando.

Här är den förbättrade koden.

|_+_|

Koden använder IF-villkorssatsen för att kontrollera om en nyckel med namnet Description finns i hashtabellen.

Sedan, om resultatet är False, använder vi i kommandoexekveringsdelen av IF-satsen Lägg till Metod för PowerShell-hashtablen för att lägga till nyckeln till hashtabellen.

Men om nyckeln finns i hashtabellen, i Else-delen av IF-satsen, visar vi ett meddelande som informerar personen som körde kommandot att nyckeln redan finns.

Efter att ha kört det sista kommandot, markera $hashtable variabel och kör den ensam. Resultatet bekräftar att nyckeln Beskrivning lades till variabeln eftersom den inte fanns.

För att testa om det här skriptet fungerar – kör det igen...

|_+_|

Den här gången lade manuset inte till nyckeln. Snarare returnerade den informationen i den andra delen av IF-utlåtandet – Nyckeln finns redan i hashtabellen .

PowerShell Hashtable metoder och egenskaper - Hur man kontrollerar om en PowerShell Hashtable innehåller en nyckel

Hur man konverterar en PowerShell-hashtabel till sträng

Det första steget för att konvertera en PowerShell Hashtable till en sträng är att returnera värdena för nycklarna i hashtabellen. Med andra ord konverterar du PowerShell-hashtablen till en PowerShell-array.

För att returnera värdena i en hashtabell, ring Värderingar hashtabellens egendom.

Här är kommandot som returnerar värdena i en hashtabell:

|_+_|

När du har returnerat värdena i en PowerShell-hashttabell är nästa steg att skicka $hashtable.Values ​​till Out-String Kommando…

7200 rpm hårddisk vs 5400
|_+_| Senare i den här guiden kommer du att inse vikten av att konvertera en PowerShell-hashtabel till en sträng. För att se den praktiska tillämpningen av detta i ett verkligt SysAdmin-skript, läs vidare.

Hur man använder PowerShell Hashtable GetEnumerator Metod

En annan viktig metod för en PowerShell-hashtabel är GetEnumerator Metod.

Du kan använda den här metoden för att separera nycklarna i en hashtabell i individuella strängar. Här är ett exempel på kommandot GetEnumerator Metod för en hashtabell:

|_+_|

Som du kan se av resultatet av kommandot ovan returneras nycklarna och värdena i enskilda rubriker. Jag kan inte komma på ett program nu, men om du någonsin behöver bryta upp nycklarna i en PowerShell-hashttabell, vet du hur du gör det!

Hur man räknar PowerShell hashbara objekt

Det finns ännu en användbar hashbar egendom, Räkna . Som namnet antyder returnerar den här egenskapen antalet nycklar i en hashtabell.

Som Värderingar Property, för att anropa Count Property, använd ett kommando som liknar det nedan:

|_+_|

Kommandot bekräftar att hashtabellen, $hashtable har 4 nycklar.

Hur man räknar PowerShell-hashtbara objekt

Hur man skapar en tom PowerShell-hashtable och lägger till nycklar

Hur man skapar en tom PowerShell-hashtable och lägger till nycklar

Hittills har alla exempel i denna S Zone fokuserat på att manipulera PowerShell hashable med befintliga nycklar. I det här avsnittet kommer du att lära dig hur du skapar en tom hashtabell.

Lägg sedan till nycklar till hashtabellen.

För att skapa en tom PowerShell-hashttabell, skriv helt enkelt in @ tecken, följt av {} fästen. Här är ett exempel på en tom hashtabell sparad i en variabel, Emptyhashtable :

|_+_|

För att bekräfta att hashtabellen skapas utan värden, kör föregående kommando. Kör sedan variabeln på egen hand.

|_+_|

Nästa steg är att använda Lägg till metod, som beskrivs tidigare i den här guiden, för att lägga till nycklar/värden till hashtabellen. I det här exemplet kommer jag att lägga till en nyckel, kallad namn , med ett värde av Dokumentera .

Här är kommandot för att utföra denna uppgift.

|_+_|

Slutligen, för att bekräfta att värdena har lagts till framgångsrikt, kör variabeln $Emptyhashtable:

|_+_|

Det sista kommandot bekräftar att värdena lades till framgångsrikt:

Hur man skapar PowerShell-hashtable med flera värden och en nyckel

Hur man skapar PowerShell-hashtable med flera värden och en nyckel

I alla exempel vi hittills har täckt har PowerShell-hashtablen ett nyckel/värdepar. Det finns dock omständigheter då du kan behöva ha en enda nyckel i en hashtabell med flera värden.

I det här fallet vill du effektivt skapa en hashtabell med arrayer som värden.

Till att börja med tycker jag att det är bättre att visa dig koderna jag använde för att skilja en hashtabell från en array.

|_+_| |_+_|

Så för att skapa en PowerShell-hashtabel med enstaka nycklar och flera värden, kör ett skript som liknar detta:

|_+_|

I manuset ovan, Loggnamn är den hashbara nyckeln medan värdena System, Application och Security tilldelas nyckeln. Vi har faktiskt skapat en enda snabb nyckel med flera värden.

För att lista de individuella värdena i Loggnamn nyckel, kör kommandot nedan:

|_+_|

Den del av skärmdumpen nedan märkt (1) är resultatet av hashtabellen, $hashtableWithArrays . Dessutom visar delen märkt (2) resultatet av $hashtableWithArrays.Values kommando.

Om du är bekant med Windows Event Logs – System, Application och Security – är namnen på Windows händelseloggar.

I nästa avsnitt kommer jag att visa dig hur du använder PowerShell ForEach loop för att iterera genom hashtabellen ovan – och kör Get-EventLog kommando på dessa 3 händelseloggar – med ett enda PowerShell-skript.

Hur man itererar PowerShell Hashtable med ForEach Loop

Hur man itererar PowerShell Hashtable med ForEach

I det sista avsnittet skapade jag en PowerShell-hashtabel med en nyckel med flera värden.

För exemplet i det här avsnittet har jag ändrat variabeln som lagrade hashtabellen till Loggnamnnycklar . Här är det uppdaterade manuset.

|_+_|

I det här avsnittet kommer jag att lära dig hur du använder För varje för att gå igenom de värden som är lagrade i Loggnamn nyckel och kör Get-EventLog kommando.

puls ccm krypton fungerar inte

För en snabb repetitionskurs om PowerShell ForEach, nedan är den allmänna syntaxen för ett PowerShell ForEach-kommando:

|_+_|

Om du tillämpar ovanstående syntax på vår Loggnamn hashable, kommer det uppdaterade kommandot att se ut så här:

Raderna som börjar med # är PowerShell-kommentarer. |_+_|

Den första delen av skriptet är samma skript som skapar PowerShell-hashtabellen med en nyckel med flera värden. Här är manuset:

|_+_|

I den andra delen av skriptet konverterade jag värdena lagrade i ($LogNameKeys.Values) till strängar och sparade resultatet i en annan variabel, LogNameKeysAsStrings .

|_+_|

Slutligen, i den tredje delen av skriptet – ForEach-slingan introduceras:

|_+_|

I den här delen av skriptet säger vi till PowerShell att ta varje värde som lagras i Loggnamn nyckel ( $LogNameKeysAsStrings ) – spara det individuella värdet tillfälligt i variabeln Loggnamnnyckel – använd sedan den temporala variabeln för att köra Get-EventLog kommando.

Jag inkluderade Nyaste parametern för Get-EventLog kommando med värdet 5 så att kommandot returnerar de 5 sista posterna i varje händelselogg. När du tittar på ett PowerShell-skript kan det se komplicerat ut. Men tittar man noga är det oftast väldigt enkelt.

Kopiera nu skriptet nedan till ett nytt PowerShell ISE-dokument och kör det.

Öppna PowerShell ISE som administratör. Om du inte öppnar PowerShell ISE som administratör kommer du att få åtkomstfelmeddelanden. |_+_|

Skärmdumpen nedan visade resultatet av skriptet. Det finns 15 rader i resultatrutan – som representerar 5 av system-, applikations- och säkerhetshändelseloggar.

Hur man anpassar en rapport med PowerShell Hashtable och Select-Object

Hur man anpassar en rapport med PowerShell Hashtable och Select-Object

I det sista avsnittet skapade vi ett PowerShell-skript som hämtar Windows-händelseloggrapporten. Här är en skärmdump av rapporten

Standardutdata för skriptet har 5 kolumner – Index , Tid , EntryType , Källa , Instans-ID , och Meddelande . Om du skickar detta som en rapport, kanske du vill ändra dessa kolumnnamn till namn som är lätta att förstå.

Här är manuset från det sista avsnittet.

Manuset har modifierats något. Jag har nu en variabel, EventLogReport som sparar utdata från ForEach-slingan. Jag kommer att förklara varför detta är nödvändigt senare. |_+_|

För att ändra kolumnrubrikens namn från det här skriptet kommer vi att pipe the Get-EventLog kommando till a Välj-objekt kommando.

Skapa sedan en PowerShell-hashtabel i Välj-objekt kommando som ändrar kolumnnamnen. Här är det modifierade manuset som utför magin.

|_+_|

Manuset verkar mycket mer komplext än det egentligen är. Men om du fokuserar på delen av skriptet efter Select-Object, blir det lätt att se skillnaden mellan det här skriptet och den tidigare kopian.

Specifikt inkluderade jag hashtabeller i Välj-objekt block av koden. Varje hashtabell anpassar utdata från Get-EventLog kommando.

oenighet rensa chatt bot

Här är ett exempel på hashtabell från Välj-objekt blockera:

|_+_|

Som vanligt har PowerShell-hashtablen två element. Nyckeln är namn , värdet är Uttryck .

En annan viktig sak att notera är att i slutet av varje hashtabell i Välj-objekt block, det finns ett kommatecken (,).

Slutligen, här är resultatet av det sista skriptet i PowerShell:

Tidigare lovade jag att förklara varför jag introducerade $EventLogReport variabel för att spara utdata från ForEach-slingan. Utan denna variabel kommer det slutliga resultatet att visa 3 individuella resultat för var och en av de 3 händelseloggarna. Men genom att lagra hela resultatet i en variabel kunde jag överföra denna variabel till Format-Table – detta visar hela resultatet som en enda tabell. Här är kommandot som utförde magin. |_+_|

Hur man exporterar PowerShell Hashtable till CSV

Hur man exporterar PowerShell Hashtable till CSV

I det här sista avsnittet kommer du att lära dig hur du exporterar en PowerShell-hashtabel till CSV.

I mitt första exempel för det här avsnittet kommer jag att visa dig hur du exporterar den här hashtabben till CSV.

|_+_|

För att framgångsrikt exportera denna PowerShell-hashtabel till en CSV-fil måste du använda GetEnumerator Metod (diskuterat tidigare) för att lista värdena. Annars kommer de faktiska nyckel-/värdeparen inte att exporteras.

Här är det modifierade skriptet som exporterar hashtabellen sparad i hashbar variabel till en CSV-fil.

|_+_|

I introducerade skriptet nedan:

|_+_|

Manuset innehåller GetEnumerator Metod i hashtabellen. Leder sedan utgången till Välj-objekt kommando.

Slutligen rör jag utgången från Välj-objekt kommando till Export-Csv kommando. För att läsa mer om hur du använder Export-Csv Cmdlet, läs vår guide – Powershell NoTypeInformation: Applikationer och exempel .

När du kör det här skriptet skapar det en CSV-fil som heter hashable.csv , i sökvägen du angav. Se skärmdumpen nedan för utdata av CSV-filen.

|_+_|

I mitt andra exempel kommer jag att exportera utdata från skriptet vi skapade i det sista avsnittet – händelseloggskriptet – till en CSV-fil.

Här är manuset. För att exportera rapporten till CSV lade jag till koden under denna i slutet av det här skriptet.

|_+_| |_+_|

Koden skickar utdata från För varje loop – sparad i EventLogReport variabel – till Export-Csv kommando . Den genererade CSV-filen visas på skärmdumpen nedan.

Det är det – en omfattande guide om PowerShell hashable! Jag hoppas att du tyckte det var till hjälp?

Om du tyckte att det var användbart, vänligen rösta Ja till frågan Var detta inlägg användbar nedan.

Alternativt kan du ställa en fråga, lämna en kommentar eller ge mer feedback med formuläret Lämna ett svar som finns i slutet av denna sida.

Slutligen, för fler PowerShell tech S Zones, besök vår Windows PowerShell How-To guide-sida. Du kan också hitta vår Work from Home-sida till stor hjälp.

Referenser och vidare läsning

  1. Allt du ville veta om hashtabeller
  2. Kombinera matriser och hashtabeller i PowerShell för skoj och vinst
  3. Om Hash-tabeller