PowerShell Hashtable Ultieme gids met voorbeelden

20 mei 2021 5546 Keer bekeken PowerShell Hashtable Uw ultieme gids met voorbeelden

Een PowerShell-hashtabel is een verzamelingsitems en hun waarden. De items worden sleutels genoemd. Bovendien heeft elke sleutel in een hashtabel een equivalente waarde.





avast met een hoge cpu

In wezen is een PowerShell-hashtabel een sleutel/waarde-opslag 'tabel'.



In deze S Zone leer ik je alles wat je moet weten over PowerShell-hashtabellen. Het eerste deel onderzoekt het verschil tussen een hashtabel en een array.

Vervolgens, in de tweede sectie, met behulp van de Get-Lid Cmdlet, ik neem je mee achter de kap van hashtabellen.



Ten slotte zal ik verschillende manieren onderzoeken om hashtabellen te gebruiken bij het scripten.



Blader door berichtonderwerpen

PowerShell Hashtable versus PowerShell-array

PowerShell Hashtable versus PowerShell-array

Voordat ik in Hashtables duik, wil ik het verschil tussen Hashtables en Arrays uitleggen. Deze differentiatie is belangrijk omdat de twee concepten gemakkelijk door elkaar kunnen worden gehaald.



In de inleiding van deze handleiding heb ik uitgelegd dat een hashtabel een sleutel/waarde-winkel is. Bovendien is een hashtabel als een tabel met sleutels en waarden.



Integendeel, een PowerShell-array is een verzameling waarden of objecten.

Het belangrijkste verschil tussen een PowerShell-hashtabel en een PowerShell-array is dat een hashtabel een verzameling items (sleutels) en hun waarden is, terwijl een array slechts een lijst met items is.

Voor een snel voorbeeld zijn de onderstaande codes voorbeelden van hashtabellen en een array - de eerste code maakt hashtabellen terwijl de tweede code een array maakt:

|__+_| |__+_| Uit de codevoorbeelden kunt u zien dat terwijl een hashtabel is ingesloten in {}, een array is ingesloten in ().

De onderstaande schermafbeelding toont de resultaten van de twee codes.

PowerShell Hashtable versus PowerShell-array

Het deel van de schermafbeelding met het label (1) is het resultaat van de hashtabel. Heb je het sleutel/waarde-paar gezien?

In het bovenstaande voorbeeld heeft de sleutel Root de waarde C:UsersvictoDocuments. Ook heeft de PSProvider-sleutel een waarde genaamd FileSystem.

Ten slotte heeft Naam de waarde Document.

Verder heeft het deel van de schermafbeelding met het label (2) het resultaat van de arraycode. Zoals eerder uitgelegd, is het slechts een lijst.

PowerShell hashtable-methoden en eigenschappen

PowerShell hashtable-methoden en eigenschappen

In de inleiding beloofde ik je mee te nemen achter de motorkap van PowerShell Hashtables. Dit is het!

In deze sectie leer ik je hoe je de Get-Member-cmdlet gebruikt om achter hashtabellen te kijken.

Wanneer u het resultaat van een PowerShell-hashtabel doorsluist naar Get-Lid , zult u in staat zijn om de beschikbare te bekijken Methoden: en Eigenschappen van de hashtabel.

Laten we teruggaan naar ons eerste overhaaste voorbeeld hierboven:

|__+_|

Kopieer de code naar een nieuw PowerShell ISE-document. Voer vervolgens de code uit.

Om vervolgens beschikbaar te zien Methoden: en Eigenschappen Voer in deze hashtabel deze opdracht uit op dezelfde PowerShell ISE.

|__+_|

Om de bovenstaande opdracht uit te voeren, plakt u deze onder de laatste code. Markeer het vervolgens en druk op F8 of klik op het gemarkeerde pictogram.

PowerShell hashtable-methoden en eigenschappen

De opdracht geeft resultaten weer in het PowerShell-consolevenster.

Kijk voor nu boven op het resultaat. Het heeft TypeName: System.Collections.Hashtable.

Dit bevestigt dat de objecten die naar de Get-Member-cmdlet zijn doorgesluisd een hashtabel is!

In de volgende subsecties van deze sectie laat ik u zien hoe u de algemene methoden en eigenschappen van een PowerShell-hashtabel kunt gebruiken.

Items toevoegen aan of verwijderen uit bestaande hashtabel

In deze sectie leert u hoe u nieuwe items aan een bestaande PowerShell-hashtabel kunt toevoegen. Bovendien leert u ook hoe u een item uit een bestaande PowerShell-hashtabel kunt verwijderen.

Voordat ik er in duik, wil ik even vermelden dat je ook een lege hashtabel kunt aanmaken. Voeg vervolgens sleutels/waarden toe aan de hashtabel - hierover later meer.

Terug naar het toevoegen of verwijderen van items aan bestaande PowerShell-hastables - toen we de . uitvoerden $hashtabel | Get-Lid commando, is een van de methoden die in het resultaat worden weergegeven: Toevoegen . Er is ook een methode, Verwijderen .

Zie de gemarkeerde delen van de onderstaande schermafbeelding:

PowerShell hashtable-methoden en eigenschappen

Voordat ik je laat zien hoe je deze twee methoden gebruikt, laten we eens kijken naar de originele PowerShell hashtabel-code:

|__+_|

De hashtabel heeft 3 items. In dit voorbeeld zal ik een andere sleutel met de naam Beschrijving met de waarde Maps toevoegen aan mijn map 'Mijn documenten'.

beste mmorpg voor mac 2015

Om deze taak te voltooien, voer ik de onderstaande opdracht uit (op dezelfde PowerShell ISE-console die ik de vorige opdrachten heb uitgevoerd)

|__+_| Let op hoe ik de Add . heb gebruikt Methode . Ik voeg een punt (.) toe naast de variabele die de hashtabel bevat. Vervolgens heb ik de methode toegevoegd, Toevoegen , gevolgd door (). Ten slotte heb ik het nieuwe sleutel/waarde-paar toegevoegd dat ik aan de hashtabel wil toevoegen.

Nadat u de opdracht hebt uitgevoerd en om te bevestigen dat de extra sleutel is toegevoegd, markeert u $hashtabel en druk op F8.

|__+_|

Hier is een screenshot van het resultaat – om te bevestigen dat de nieuwe sleutel/waarde is toegevoegd.

Verderop kunt u dezelfde aanpak gebruiken om een ​​waarde uit een PowerShell-hashtabel te verwijderen.

Om de laatste sleutel te verwijderen die we aan de hashtabel hebben toegevoegd, voert u een opdracht uit die lijkt op de laatste opdracht. Vervang deze keer echter de Toevoegen Methode met de Verwijderen Methode.

Hier is de opdracht:

|__+_| De Verwijderen Methode bevat alleen de sleutel . U hoeft de sleutel niet bij te voegen waarde in de opdracht.

Voer eerst de bovenstaande opdracht uit. Om te bevestigen dat de sleutel is verwijderd, markeert u vervolgens $hashtabel en druk op F8.

|__+_|

Het resultaat van de opdracht bevestigt dat de sleutel is verwijderd!

PowerShell Hashtable-methoden en -eigenschappen - Items toevoegen aan of verwijderen uit bestaande hashtabel

Hoe te controleren of een PowerShell-hashtabel een sleutel bevat?

Toen we de hastable hieronder doorsluisden naar de Get-Lid cmdlet, een van de weergegeven methoden is de BevatSleutel Methode - zie de onderstaande schermafbeelding.

|__+_|

De BevatSleutel Methode kan op zoveel manieren worden gebruikt. Een van de gebruikelijke toepassingen van deze methode is echter om deze te gebruiken om te controleren of een sleutel in een hashtabel bestaat en zo niet, om de sleutel toe te voegen.

Een andere toepassing van de BevatSleutel De methode van een PowerShell-hashtabel is om deze eenvoudig te gebruiken om te controleren of er een sleutelnaam in de hashtabel bestaat.

Om te controleren of een sleutel bestaat in een PowerShell-hashtabel met behulp van de BevatSleutel Methode, voer de onderstaande opdracht uit:

|__+_|

Deze opdracht controleert of er een sleutel met de naam Beschrijving bestaat in de hashtabel die is opgeslagen in de $hashtable-variabele. Het resultaat van de opdracht geeft False weer.

PowerShell Hashtable-methoden en -eigenschappen - Hoe te controleren of een PowerShell-hashtabel een sleutel bevat

Om te controleren of de Description-sleutel bestaat voordat deze aan de PowerShell-hashtabel wordt toegevoegd, hebben we een extra regel codes nodig voor de vorige opdracht.

Hier is de verbeterde code.

|__+_|

De code gebruikt de IF-voorwaardelijke instructie om te controleren of een sleutel met de naam Beschrijving in de hashtabel voorkomt.

Als het resultaat False is, gebruiken we in het opdrachtuitvoeringsgedeelte van de IF-instructie de Toevoegen Methode van de PowerShell-hashtabel om de sleutel aan de hashtabel toe te voegen.

Als de sleutel echter in de hashtabel staat, wordt in het Else-gedeelte van de IF-instructie een bericht weergegeven waarin de persoon die de opdracht heeft uitgevoerd wordt geïnformeerd dat de sleutel al bestaat.

Markeer na het uitvoeren van de laatste opdracht de $hashtabel variabele en voer het alleen uit. Het resultaat bevestigt dat de sleutel Beschrijving aan de variabele is toegevoegd omdat deze niet bestond.

Om te testen of dit script werkt - voer het opnieuw uit...

|__+_|

Deze keer heeft het script de sleutel niet toegevoegd. In plaats daarvan heeft het de informatie in het Else-gedeelte van de IF-verklaring geretourneerd - De sleutel bestaat al in de hashtabel .

PowerShell Hashtable-methoden en -eigenschappen - Hoe te controleren of een PowerShell-hashtabel een sleutel bevat

Hoe een PowerShell-hashtabel naar string te converteren?

De eerste stap om een ​​PowerShell-hashtabel naar een tekenreeks te converteren, is het retourneren van de waarden van de sleutels in de hashtabel. Met andere woorden, u converteert de PowerShell-hashtabel naar een PowerShell-array.

Om de waarden in een hashtabel terug te geven, roept u de Waarden eigenschap van de hashtabel.

Hier is de opdracht die de waarden in een hashtabel retourneert:

|__+_|

Nadat u de waarden in een PowerShell-hashtabel hebt geretourneerd, is de volgende stap om $hashtable.Values ​​naar de Out-String Opdracht…

|__+_| Verderop in deze handleiding zult u het belang inzien van het converteren van een PowerShell-hashtabel naar een tekenreeks. Lees verder om de praktische toepassing hiervan in een real-world SysAdmin-scripting te zien.

Hoe PowerShell Hashtable te gebruiken? GetEnumerator Methode

Een andere belangrijke methode van een PowerShell-hashtabel is de GetEnumerator Methode.

U kunt deze methode gebruiken om de sleutels in een hashtabel te scheiden in afzonderlijke tekenreeksen. Hier is een voorbeeldcommando van de GetEnumerator Methode van een hashtabel:

|__+_|

Zoals u kunt zien aan het resultaat van de bovenstaande opdracht, worden de sleutels en waarden geretourneerd in afzonderlijke kopteksten. Ik kan nu geen toepassing bedenken, maar als je ooit de sleutels in een PowerShell-hashtabel moet opsplitsen, weet je hoe je het moet doen!

Hoe PowerShell Hashtable-items te tellen

Er is nog een andere nuttige hashtabel-eigenschap, Graaf . Zoals de naam al aangeeft, retourneert deze eigenschap het aantal sleutels in een hashtabel.

Zoals de Waarden Property, om de Count Property aan te roepen, gebruik je een commando dat vergelijkbaar is met het onderstaande:

|__+_|

Het commando bevestigt dat de hashtabel, $hashtable 4 sleutels heeft.

Hoe PowerShell Hashtable-items te tellen

Een lege PowerShell-hashtabel maken en sleutels toevoegen

Een lege PowerShell-hashtabel maken en sleutels toevoegen

Tot nu toe waren alle voorbeelden in deze S-zone gericht op het manipuleren van PowerShell-hashtabel met bestaande sleutels. In deze sectie leert u hoe u een lege hashtabel maakt.

Voeg vervolgens sleutels toe aan de hashtabel.

Om een ​​lege PowerShell-hashtabel te maken, voert u eenvoudig de . in @ teken, gevolgd door {} beugels. Hier is een voorbeeld van een lege hashtabel die is opgeslagen in een variabele, lege hashtabel :

|__+_|

Voer de vorige opdracht uit om te bevestigen dat de hashtabel zonder waarden is gemaakt. Voer vervolgens de variabele alleen uit.

|__+_|

De volgende stap is het gebruik van de Toevoegen methode, die eerder in deze handleiding is behandeld, om sleutels/waarden aan de hashtabel toe te voegen. In dit voorbeeld zal ik een sleutel toevoegen, genaamd Naam , met een waarde van Document .

Hier is de opdracht om deze taak uit te voeren.

|__+_|

Ten slotte, om te bevestigen dat de waarden met succes zijn toegevoegd, voert u de variabele $Emptyhashtable uit:

sm-n900a heemst
|__+_|

Het laatste commando bevestigt dat de waarden met succes zijn toegevoegd:

Hoe een PowerShell-hashtabel te maken met meerdere waarden en één sleutel

Hoe een PowerShell-hashtabel te maken met meerdere waarden en één sleutel

In alle voorbeelden die we tot nu toe hebben behandeld, heeft de PowerShell-hashtabel één sleutel/waarde-paar. Er zijn echter omstandigheden waarin u mogelijk een enkele sleutel in een hashtabel met meerdere waarden nodig heeft.

In dit geval wilt u in feite een hashtabel maken met arrays als waarden.

Om te beginnen denk ik dat het beter is om je de codes te laten zien die ik heb gebruikt om een ​​hashtabel van een array te onderscheiden.

|__+_| |__+_|

Als u dus een PowerShell-hashtabel met enkele sleutels en meerdere waarden wilt maken, voert u een script uit dat er ongeveer als volgt uitziet:

|__+_|

In het bovenstaande script Lognaam is de hashtabelsleutel terwijl de waarden Systeem, Toepassing en Beveiliging aan de sleutel zijn toegewezen. In feite hebben we een enkele hastable sleutel gemaakt met meerdere waarden.

Om de individuele waarden in de . weer te geven Lognaam toets, voer de onderstaande opdracht uit:

|__+_|

Het deel van de onderstaande schermafbeelding met het label (1) is het resultaat van de hashtabel, $hashtableWithArrays . Bovendien toont het gedeelte met het label (2) het resultaat van de $hashtableWithArrays.Values opdracht.

Als u bekend bent met Windows-gebeurtenislogboeken - Systeem, Toepassing en Beveiliging - zijn namen van Windows-gebeurtenislogboeken.

In de volgende sectie zal ik u laten zien hoe u PowerShell ForEach-lus gebruikt om door de bovenstaande hashtabel te itereren - en voer de Get-EventLog opdracht op deze 3 gebeurtenislogboeken - met behulp van een enkel PowerShell-script.

Hoe PowerShell Hashtable te herhalen met ForEach Loop

Hoe PowerShell Hashtable te herhalen met ForEach

In de laatste sectie heb ik een PowerShell-hashtabel met één sleutel gemaakt met meerdere waarden.

Voor het voorbeeld in deze sectie heb ik de variabele die de hashtabel heeft opgeslagen, gewijzigd in: LogNaamSleutels . Hier is het bijgewerkte script.

|__+_|

In dit gedeelte leer ik je hoe je voor elk om door de waarden te bladeren die zijn opgeslagen in de Lognaam toets en voer de . uit Get-EventLog opdracht.

Voor een snelle opfriscursus over PowerShell ForEach vindt u hieronder de algemene syntaxis van een PowerShell ForEach-opdracht:

|__+_|

Als u de bovenstaande syntaxis toepast op onze LogNamen hashtable, ziet de bijgewerkte opdracht er als volgt uit:

De regels die beginnen met # zijn PowerShell-opmerkingen. |__+_|

Het eerste deel van het script is hetzelfde script dat de PowerShell-hashtabel met één sleutel maakt met meerdere waarden. Hier is het script:

|__+_|

In het tweede deel van het script heb ik de waarden die zijn opgeslagen in ($LogNameKeys.Values) omgezet in strings en het resultaat opgeslagen in een andere variabele, LogNaamSleutelsAsStrings .

|__+_|

Ten slotte wordt in het derde deel van het script - de ForEach-lus geïntroduceerd:

|__+_|

In dit deel van het script vertellen we PowerShell om elke waarde te nemen die is opgeslagen in de Lognaam sleutel ( $LogNameKeysAsStrings ) – sla die individuele waarde tijdelijk op in de variabele LogNaamSleutel – gebruik dan de tijdelijke variabele om de . uit te voeren Get-EventLog opdracht.

ik heb de Nieuwste parameter van de Get-EventLog opdracht met een waarde van 5 zodat de opdracht de laatste 5 vermeldingen van elk gebeurtenislogboek retourneert. Als u naar een PowerShell-script kijkt, ziet het er misschien ingewikkeld uit. Maar als je goed kijkt, is het meestal heel eenvoudig.

Kopieer nu het onderstaande script naar een nieuw PowerShell ISE-document en voer het uit.

Open PowerShell ISE als beheerder. Als u PowerShell ISE niet als beheerder opent, ontvangt u toegangsfoutberichten. |__+_|

De onderstaande schermafbeelding toonde het resultaat van het script. Er zijn 15 rijen in het resultatenvenster, die 5 van systeem-, toepassings- en beveiligingsgebeurtenislogboeken vertegenwoordigen.

Een rapport aanpassen met PowerShell Hashtable en Select-Object

Een rapport aanpassen met PowerShell Hashtable en Select-Object

In de laatste sectie hebben we een PowerShell-script gemaakt dat het Windows-gebeurtenislogboekrapport ophaalt. Hier is een screenshot van het rapport

De standaarduitvoer van het script heeft 5 kolommen - Inhoudsopgave , Tijd , Invoertype , Bron , Instantie-ID , en Bericht . Als u dit als een rapport verzendt, wilt u deze kolomnamen misschien wijzigen in namen die gemakkelijk te begrijpen zijn.

Hier is het script van de laatste sectie.

Het script is enigszins aangepast. Ik heb nu een variabele, EventLogReport dat de uitvoer van de ForEach-lus opslaat. Waarom dit nodig is, zal ik later uitleggen. |__+_|

Om de kolomkopnamen van dit script te wijzigen, zullen we de Get-EventLog commando om een Selecteer-Object opdracht.

Maak vervolgens een PowerShell-hashtabel binnen de Selecteer-Object commando dat de kolomnamen wijzigt. Hier is het aangepaste script dat de magie uitvoert.

|__+_|

Het script lijkt veel complexer dan het in werkelijkheid is. Als u zich echter concentreert op het deel van het script na Select-Object, zal het gemakkelijk zijn om het verschil te zien tussen dit script en de eerdere kopie.

In het bijzonder heb ik hashtabellen opgenomen in de Selecteer-Object blok van de code. Elke hashtabel past de uitvoer van de Get-EventLog opdracht.

Hier is een voorbeeld-hashtabel van de Selecteer-Object blok:

|__+_|

Zoals gewoonlijk heeft de PowerShell-hashtabel twee elementen. De sleutel is de Naam , de waarde is de Uitdrukking .

Een ander belangrijk ding om op te merken is dat aan het einde van elke hashtabel in de Selecteer-Object blok, is er een komma (,).

Eindelijk, hier is het resultaat van het laatste script in PowerShell:

Eerder beloofde ik uit te leggen waarom ik introduceerde $EventLogReport variabele om de uitvoer van de ForEach-lus op te slaan. Zonder deze variabele zal het eindresultaat 3 individuele resultaten weergeven voor elk van de 3 gebeurtenislogboeken. Door de hele resultaten in een variabele op te slaan, kon ik deze variabele echter in Format-Table pipen - dit geeft het hele resultaat als een enkele tabel weer. Hier is het commando dat de magie uitvoerde. |__+_|

Hoe PowerShell Hashtable naar CSV te exporteren

Hoe PowerShell Hashtable naar CSV te exporteren

In dit laatste gedeelte leert u hoe u een PowerShell-hashtabel naar CSV exporteert.

In mijn eerste voorbeeld voor deze sectie laat ik je zien hoe je deze hashtabe naar CSV exporteert.

popcorn tijd naar chromecast
|__+_|

Om deze PowerShell-hashtabel met succes naar een CSV-bestand te exporteren, moet u de GetEnumerator Methode (eerder besproken) om de waarden weer te geven. Anders worden de werkelijke sleutel/waarde-paren niet geëxporteerd.

Hier is het aangepaste script dat de hashtabel exporteert die is opgeslagen in de hashtabel variabele naar een CSV-bestand.

|__+_|

In introduceerde het onderstaande script:

|__+_|

Het script bevat de GetEnumerator Methode in de hashtabel. Leidt vervolgens de uitvoer naar de Selecteer-Object opdracht.

Ten slotte pijp ik de uitvoer van de Selecteer-Object commando aan de Export-Csv opdracht. Om meer te lezen over het gebruik Export-Csv Cmdlet, lees onze gids – Powershell NoTypeInformation: toepassingen en voorbeelden.

Wanneer u dit script uitvoert, wordt een CSV-bestand gemaakt met de naam hashtabel.csv , in het pad dat u hebt opgegeven. Zie de onderstaande schermafbeelding voor de uitvoer van het CSV-bestand.

|__+_|

In mijn tweede voorbeeld exporteer ik de uitvoer van het script dat we in de laatste sectie hebben gemaakt - het gebeurtenislogboekscript - naar een CSV-bestand.

Hier is het script. Om het rapport naar CSV te exporteren, heb ik de onderstaande code aan het einde van dit script toegevoegd.

|__+_| |__+_|

De code leidt de uitvoer van de Voor Elk lus - opgeslagen in de EventLogReport variabel – naar de Export-Csv-opdracht . Het gegenereerde CSV-bestand wordt weergegeven in de onderstaande schermafbeelding.

Dat is het - een uitgebreide gids over PowerShell hashtable! Ik hoop dat je het nuttig vond?

Als je het nuttig vond, stem dan vriendelijk Ja op de Was dit bericht Nuttige vraag hieronder.

U kunt ook een vraag stellen, een opmerking achterlaten of meer feedback geven met het formulier Laat een antwoord achter aan het einde van deze pagina.

Bezoek ten slotte onze Windows PowerShell How-To-gidspagina voor meer PowerShell tech S-zones. Misschien vindt u onze pagina Werken vanaf de startpagina ook erg nuttig.

Referenties en verder lezen

  1. Alles wat je wilde weten over hashtabellen
  2. Combineer arrays en hash-tabellen in PowerShell voor plezier en winst
  3. Over hashtabellen