PowerShell Hashtable Ultimate Guide s príkladmi
Hašovacia tabuľka PowerShell je kolekcia položiek a ich hodnôt. Položky sa označujú ako kľúče. Okrem toho má každý kľúč v hašovacej tabuľke ekvivalentnú hodnotu.
Hashtable PowerShell je v podstate „tabuľka“ úložiska kľúča a hodnoty.
V tejto S zóne vás naučím všetko, čo potrebujete vedieť o hashtables PowerShell. Prvá časť skúma rozdiel medzi Hashtable a Array.
Potom v druhej časti pomocou Staňte sa členom Cmdlet, vezmem vás za kapotu hashtables.
Nakoniec preskúmam rôzne spôsoby použitia hashtables v skriptovaní.
Prehľadávať témy príspevkov
- PowerShell Hashtable vs PowerShell Array
- PowerShell Hashtable metódy a vlastnosti
- Ako vytvoriť prázdnu hašovaciu tabuľku PowerShell a pridať kľúče
- Ako vytvoriť hashtable PowerShell s viacerými hodnotami a jedným kľúčom
- Ako iterovať hashtable PowerShell s ForEach Loop
- Ako prispôsobiť zostavu pomocou hashtable PowerShell a výberu objektu
- Ako exportovať hashtable PowerShell do CSV
- Referencie a ďalšie čítanie
PowerShell Hashtable vs PowerShell Array
Predtým, ako sa ponorím do Hashtables, chcem vysvetliť rozdiel medzi Hashtables a Arrays. Táto diferenciácia je dôležitá, pretože tieto dva pojmy sa môžu ľahko zameniť.
V úvode tejto príručky som vysvetlil, že hašovacia tabuľka je úložisko kľúč/hodnota. Okrem toho je hašovacia tabuľka ako tabuľka s kľúčmi a hodnotami.
Naopak, PowerShell Array je zbierka hodnôt alebo objektov.
Primárny rozdiel medzi hashtable PowerShell a poľom PowerShell je v tom, že hashtable je kolekcia položiek (kľúčov) a ich hodnôt – zatiaľ čo pole je len zoznam položiek.
Pre rýchly príklad sú nižšie uvedené kódy príkladmi hašovacích tabuliek a poľa – prvý kód vytvára hašovacie tabuľky, zatiaľ čo druhý kód vytvára pole:
|_+_| |_+_| Z príkladov kódu môžete vidieť, že zatiaľ čo hašovacia tabuľka je uzavretá v {}, pole je uzavreté v ().Snímka obrazovky nižšie zobrazuje výsledky týchto dvoch kódov.
Časť snímky obrazovky označená (1) je výsledkom hashovacej tabuľky. Videli ste pár kľúč/hodnota?
Vo vyššie uvedenom príklade má kľúč Root hodnotu C:UsersvictoDocuments. Kľúč PSProvider má tiež hodnotu s názvom FileSystem.
Nakoniec má Name hodnotu Document.
Okrem toho časť snímky obrazovky označená (2) obsahuje výsledok kódu poľa. Ako už bolo vysvetlené, je to len zoznam.
PowerShell Hashtable metódy a vlastnosti
V úvode som sľúbil, že vás vezmem za kapotu PowerShell Hashtables. Toto je ono!
V tejto časti vás naučím, ako používať cmdlet Get-Member, aby ste sa pozreli za hashtables.
Keď prenesiete výsledok hashtable PowerShell do Staňte sa členom , budete môcť skontrolovať dostupné Metódy a Vlastnosti z Hashtable.
Vráťme sa k nášmu prvému rýchlemu príkladu vyššie:
|_+_|Skopírujte kód do nového dokumentu PowerShell ISE. Potom spustite kód.
Potom, aby ste videli k dispozícii Metódy a Vlastnosti v tejto hašovacej tabuľke spustite tento príkaz na rovnakom PowerShell ISE.
|_+_|Ak chcete spustiť vyššie uvedený príkaz, vložte ho pod posledný kód. Potom ho zvýraznite a stlačte kláves F8 alebo kliknite na zvýraznenú ikonu.
Príkaz zobrazí výsledky na paneli konzoly PowerShell.
Zatiaľ sa pozrite na výsledok. Má TypeName: System.Collections.Hashtable.
Toto potvrdzuje, že objekty vložené do cmdletu Get-Member sú hashtable!
V nasledujúcich podsekciách tejto časti vám ukážem, ako používať bežné metódy a vlastnosti hashtable PowerShell.
Ako pridať alebo odstrániť položky z existujúceho hashtable
V tejto časti sa naučíte pridávať nové položky do existujúcej hashovacej tabuľky PowerShell. Okrem toho sa tiež dozviete, ako odstrániť položku z existujúcej hashovacej tabuľky PowerShell.
Predtým, ako sa do toho ponorím, chcem spomenúť, že môžete vytvoriť aj prázdny hashtable. Potom pridajte kľúče/hodnoty do hašovacej tabuľky – viac neskôr.
Späť k pridávaniu alebo odstraňovaniu položiek do existujúcich hastables PowerShell – keď sme spustili $hashtable | Staňte sa členom jednou z metód zobrazených vo výsledku je Pridať . Existuje aj metóda, Odstrániť .
Pozrite si zvýraznené časti snímky obrazovky nižšie:
Predtým, ako vám ukážem, ako používať tieto dve metódy, pozrime sa na pôvodný kód hashtable PowerShell:
|_+_|Hashovacia tabuľka má 3 položky. V tomto príklade pridám do priečinka „Moje dokumenty“ ďalší kľúč s názvom Popis s hodnotou Maps.
Na dokončenie tejto úlohy spustím príkaz uvedený nižšie (na tej istej konzole PowerShell ISE, na ktorej som spustil predchádzajúce príkazy)
|_+_| Všimnite si, ako som použil Pridať Metóda . Pridávam bodku (.) vedľa premennej, ktorá obsahuje hashovaciu tabuľku. Potom som zahrnul metódu, Pridať , nasledovaný (). Nakoniec som zahrnul nový pár kľúč/hodnota, ktorý chcem pridať do hashovacej tabuľky.Po spustení príkazu zvýraznite, aby ste potvrdili, že bol pridaný ďalší kľúč $hashtable a stlačte F8.
|_+_|Tu je snímka obrazovky s výsledkom – potvrdzujúca, že bol pridaný nový kľúč/hodnota.
Rovnaký prístup môžete použiť aj na odstránenie hodnoty z hashtable PowerShell.
Ak chcete odstrániť posledný kľúč, ktorý sme pridali do hashovacej tabuľky, spustite príkaz podobný poslednému príkazu. Tentoraz však nahradiť Pridať Metóda s Odstrániť Metóda.
Tu je príkaz:
|_+_| The Odstrániť Metóda zahŕňa iba kľúč . Nemusíte pridávať kľúč hodnotu v príkaze.Najprv spustite vyššie uvedený príkaz. Potom, aby ste potvrdili, že kľúč bol odstránený, zvýraznite $hashtable a stlačte F8.
|_+_|Výsledok príkazu potvrdzuje, že kľúč bol odstránený!
Ako skontrolovať, či hashtable PowerShell obsahuje kľúč
Keď sme prepojili hastable nižšie do Staňte sa členom Cmdlet, jednou zo zobrazených metód je Obsahuje kľúč Metóda – pozri snímku obrazovky nižšie.
|_+_|
The Obsahuje kľúč Metóda sa dá použiť mnohými spôsobmi. Jednou z bežných aplikácií tejto metódy je však jej použitie na kontrolu, či kľúč existuje v hašovacej tabuľke, a ak nie, pridajte kľúč.
Ďalšia aplikácia Obsahuje kľúč Metódou hashtable PowerShell je jednoducho ho použiť na kontrolu, či v hašovacej tabuľke existuje názov kľúča.
Ak chcete skontrolovať, či kľúč existuje v hašovacej tabuľke PowerShell, pomocou Obsahuje kľúč Metóda, spustite príkaz nižšie:
|_+_|Tento príkaz skontroluje, či v hašovacej tabuľke uloženej v premennej $hashtable existuje kľúč s názvom Popis. Výsledok príkazu zobrazí False.
Aby sme pred pridaním do hashtable PowerShell skontrolovali, či kľúč Description existuje, budeme potrebovať ďalší riadok kódov k predchádzajúcemu príkazu.
Tu je vylepšený kód.
|_+_|Kód používa podmienený príkaz IF na kontrolu, či v hašovacej tabuľke existuje kľúč s názvom Popis.
Potom, ak je výsledok False, v časti vykonávania príkazu príkazu IF použijeme príkaz Pridať Metóda hashtable PowerShell na pridanie kľúča do hashtable.
Ak však kľúč existuje v hašovacej tabuľke, v časti Else príkazu IF zobrazíme správu informujúcu osobu, ktorá spustila príkaz, že kľúč už existuje.
Po spustení posledného príkazu zvýraznite $hashtable premenné a spustite ho samostatne. Výsledok potvrdzuje, že kľúč Popis bol pridaný do premennej, pretože neexistoval.
Ak chcete otestovať, či tento skript funguje, spustite ho znova…
|_+_|Tentoraz skript nepridal kľúč. Namiesto toho vrátil informácie v časti Else výkazu IF – Kľúč už v hašovacej tabuľke existuje .
Ako previesť hashtable PowerShell na reťazec
Prvým krokom na konverziu hashtable PowerShell na reťazec je vrátenie hodnôt kľúčov v hashtable. Inými slovami, konvertujete hashovaciu tabuľku PowerShell na pole PowerShell.
Ak chcete vrátiť hodnoty v hašovacej tabuľke, zavolajte na hodnoty vlastnosť hashtable.
ako posielať poštu v rade v gmaile -
Tu je príkaz, ktorý vráti hodnoty v hašovacej tabuľke:
|_+_|Keď vrátite hodnoty v hashtable PowerShell, ďalším krokom je presmerovanie $hashtable.Values do Out-String Príkaz…
|_+_| Neskôr v tejto príručke oceníte dôležitosť konverzie hashtable PowerShell na reťazec. Ak chcete vidieť praktickú aplikáciu tohto skriptu v reálnom svete SysAdmin, čítajte ďalej.Ako používať hashtable PowerShell GetEnumerator Metóda
Ďalšou dôležitou metódou hashtable PowerShell je GetEnumerator Metóda.
Túto metódu môžete použiť na oddelenie kľúčov v hašovacej tabuľke do jednotlivých reťazcov. Tu je vzorový príkaz GetEnumerator Metóda hashtable:
|_+_|Ako môžete vidieť z výsledku vyššie uvedeného príkazu, kľúče a hodnoty sa vracajú v jednotlivých hlavičkách. Teraz ma nenapadá žiadna aplikácia, ak by ste však niekedy potrebovali rozbiť kľúče v hashtable PowerShell, viete, ako na to!
Ako počítať položky hashtable PowerShell
Existuje ďalšia užitočná vlastnosť hashtable Property, počítať . Ako už názov napovedá, táto vlastnosť vracia počet kľúčov v hašovacej tabuľke.
Ako hodnoty Vlastnosť, ak chcete volať vlastnosť Count, použite príkaz podobný tomu nižšie:
|_+_|Príkaz potvrdzuje, že hashtable $hashtable má 4 kľúče.
Ako vytvoriť prázdnu hašovaciu tabuľku PowerShell a pridať kľúče
Doteraz sa všetky príklady v tejto S zóne zameriavali na manipuláciu hashtable PowerShell s existujúcimi kľúčmi. V tejto časti sa dozviete, ako vytvoriť prázdnu hašovaciu tabuľku.
Potom pridajte kľúče do hašovacej tabuľky.
Ak chcete vytvoriť prázdnu hašovaciu tabuľku PowerShell, jednoducho zadajte @ znak, za ktorým nasleduje {} zátvorkách. Tu je príklad prázdnej hašovacej tabuľky uloženej v premennej, Prázdna tabuľka hash :
|_+_|Ak chcete potvrdiť, že hašovacia tabuľka je vytvorená bez hodnôt, spustite predchádzajúci príkaz. Potom spustite premennú samostatne.
|_+_|Ďalším krokom je použitie Pridať metóda, o ktorej sme sa už zmienili v tejto príručke, na pridanie kľúčov/hodnoty do hašovacej tabuľky. V tomto príklade pridám kľúč, tzv názov , s hodnotou dokument .
Tu je príkaz na vykonanie tejto úlohy.
|_+_|Nakoniec, aby ste potvrdili, že hodnoty boli pridané úspešne, spustite premennú $Emptyhashtable:
|_+_|Posledný príkaz potvrdzuje, že hodnoty boli pridané úspešne:
Ako vytvoriť hashtable PowerShell s viacerými hodnotami a jedným kľúčom
Vo všetkých príkladoch, ktorými sme sa doteraz zaoberali, má hašovacia tabuľka PowerShell jeden pár kľúč/hodnota. Existujú však okolnosti, keď možno budete musieť mať jeden kľúč v hašovacej tabuľke s viacerými hodnotami.
V tomto prípade skutočne chcete vytvoriť hašovaciu tabuľku s poľami ako hodnotami.
Na začiatok si myslím, že je lepšie ukázať vám kódy, ktoré som použil na odlíšenie hashovacej tabuľky od poľa.
|_+_| |_+_|Ak teda chcete vytvoriť hashovaciu tabuľku PowerShell s jedným kľúčom a viacerými hodnotami, spustite skript podobný tomuto:
avast vysoké využitie antivírusového disku|_+_|
Vo vyššie uvedenom skripte LogName je hashtable kľúč, zatiaľ čo hodnoty System, Application a Security sú priradené ku kľúču. Účinne sme vytvorili jeden hastable kľúč s viacerými hodnotami.
Ak chcete vypísať jednotlivé hodnoty v LogName kľúč, spustite príkaz nižšie:
|_+_|Časť nižšie uvedenej snímky obrazovky označená (1) je výsledkom hashovacej tabuľky, $hashtableWithArrays . Okrem toho časť označená (2) zobrazuje výsledok testu $hashtableWithArrays.Values príkaz.
Ak poznáte protokoly udalostí systému Windows – systém, aplikácia a zabezpečenie – sú názvy protokolov udalostí systému Windows.
V ďalšej časti vám ukážem, ako použiť slučku PowerShell ForEach na iteráciu vyššie uvedenej hašovacej tabuľky – a spustiť Get-EventLog príkaz na týchto 3 protokoloch udalostí – pomocou jediného skriptu PowerShell.
Ako iterovať hashtable PowerShell s ForEach Loop
V poslednej časti som vytvoril hashtable PowerShell s jedným kľúčom s viacerými hodnotami.
Pre príklad v tejto časti som zmenil premennú, do ktorej bola uložená hashovacia tabuľka LogNameKeys . Tu je aktualizovaný skript.
|_+_|V tejto časti vás naučím používať Pre každý prechádzať cez hodnoty uložené v LogName kľúč a spustite Get-EventLog príkaz.
Pre rýchly opakovací kurz o PowerShell ForEach je nižšie uvedená všeobecná syntax príkazu PowerShell ForEach:
|_+_|Ak použijete vyššie uvedenú syntax na náš LogNames hashtable, aktualizovaný príkaz bude vyzerať takto:
Riadky začínajúce znakom # sú komentáre prostredia PowerShell . |_+_|Prvá časť skriptu je rovnaký skript, ktorý vytvára hashovaciu tabuľku PowerShell s jedným kľúčom s viacerými hodnotami. Tu je skript:
|_+_|V druhej časti skriptu som skonvertoval hodnoty uložené v ($LogNameKeys.Values) na reťazce a výsledok som uložil do inej premennej, LogNameKeysAsStrings .
|_+_|Nakoniec, v tretej časti skriptu – je predstavená slučka ForEach:
|_+_|V tejto časti skriptu povieme PowerShellu, aby prevzal každú hodnotu uloženú v LogName kľúč ( $LogNameKeysAsStrings ) – túto individuálnu hodnotu dočasne uloží do premennej LogNameKey – potom použite dočasnú premennú na spustenie Get-EventLog príkaz.
Zahrnul som Najnovšie parametrom Get-EventLog príkaz s hodnotou 5, takže príkaz vráti posledných 5 záznamov každého protokolu udalostí. Keď sa pozriete na skript PowerShell, môže vyzerať komplikovane. Ak sa však pozriete pozorne, je to zvyčajne veľmi jednoduché.Teraz skopírujte skript nižšie do nového dokumentu PowerShell ISE a spustite ho.
Otvorte PowerShell ISE ako správca. Ak neotvoríte PowerShell ISE ako správca, dostanete chybové hlásenia o prístupe. |_+_|Snímka obrazovky nižšie zobrazuje výsledok skriptu. V paneli výsledkov je 15 riadkov – predstavuje 5 protokolov udalostí systému, aplikácie a zabezpečenia.
Ako prispôsobiť zostavu pomocou hashtable PowerShell a výberu objektu
V poslednej časti sme vytvorili skript PowerShell, ktorý stiahne správu denníka udalostí systému Windows. Tu je snímka obrazovky správy
Predvolený výstup skriptu má 5 stĺpcov – Index , čas , EntryType , Zdroj , InstanceID a Správa . Ak to posielate ako prehľad, možno budete chcieť zmeniť názvy týchto stĺpcov na názvy, ktoré budú ľahko zrozumiteľné.
Tu je skript z poslednej časti.
Scenár bol mierne upravený. Teraz mám premennú, EventLogReport ktorý uloží výstup slučky ForEach. Prečo je to potrebné, vysvetlím neskôr. |_+_|Ak chcete upraviť názvy hlavičiek stĺpcov z tohto skriptu, použijeme kanál Get-EventLog príkaz a Select-Object príkaz.
Potom vytvorte hashtable PowerShell v rámci Select-Object príkaz, ktorý upravuje názvy stĺpcov. Tu je upravený skript, ktorý vykonáva kúzlo.
|_+_|Scenár vyzerá oveľa zložitejšie, než v skutočnosti je. Ak sa však zameriate na časť skriptu po Select-Object, bude ľahké zistiť rozdiel medzi týmto skriptom a predchádzajúcou kópiou.
Konkrétne som do súboru zahrnul hashtables Select-Object blok kódu. Každá hašovacia tabuľka prispôsobuje výstup súboru Get-EventLog príkaz.
Tu je vzorová hašovacia tabuľka z Select-Object blokovať:
|_+_|Ako obvykle, hashtable PowerShell má dva prvky. Kľúčom je názov , hodnota je Výraz .
Ďalšou dôležitou vecou, ktorú treba poznamenať, je, že na konci každej hashovacej tabuľky v Select-Object bloku, je tam čiarka (,).
Nakoniec tu je výsledok konečného skriptu v PowerShell:
Predtým som sľúbil, že vysvetlím, prečo som sa predstavil $EventLogReport premennej na uloženie výstupu cyklu ForEach. Bez tejto premennej sa v konečnom výsledku zobrazia 3 individuálne výsledky pre každý z 3 protokolov udalostí. Uložením celých výsledkov do premennej som však mohol túto premennú preniesť do Format-Table – to zobrazí celý výsledok ako jednu tabuľku. Tu je príkaz, ktorý vykonal kúzlo. |_+_|Ako exportovať hashtable PowerShell do CSV
V tejto poslednej časti sa dozviete, ako exportovať hashtable PowerShell do CSV.
V mojom prvom príklade pre túto sekciu vám ukážem, ako exportovať túto hashtabe do CSV.
|_+_|Ak chcete úspešne exportovať túto hašovaciu tabuľku PowerShell do súboru CSV, musíte použiť súbor GetEnumerator Metóda (diskutovaná vyššie) na zoznam hodnôt. V opačnom prípade sa skutočné páry kľúč/hodnota neexportujú.
Tu je upravený skript, ktorý exportuje hashovaciu tabuľku uloženú v hashtable premennej do súboru CSV.
|_+_|V predstavení nižšie uvedeného skriptu:
|_+_|Skript obsahuje GetEnumerator Metóda v hašovacej tabuľke. Potom výstup potrubím do Select-Object príkaz.
Nakoniec som potrubný výstup z Select-Object príkaz na Export-Csv príkaz. Ak si chcete prečítať viac o tom, ako používať Export-Csv Cmdlet, prečítajte si našu príručku – Powershell NoTypeInformation: Aplikácie a príklady .
Keď spustíte tento skript, vytvorí súbor CSV s názvom hashtable.csv , v zadanej ceste. Pozrite si snímku obrazovky nižšie pre výstup súboru CSV.
|_+_|
V mojom druhom príklade exportujem výstup skriptu, ktorý sme vytvorili v poslednej sekcii – skript denníka udalostí – do súboru CSV.
Tu je scenár. Na export zostavy do CSV som pridal kód pod tento na koniec tohto skriptu.
|_+_| |_+_|Kód vedie výstup z Pre každý slučka – uložená v EventLogReport premenná – do Príkaz Export-Csv . Vygenerovaný súbor CSV je zobrazený na snímke obrazovky nižšie.
To je všetko – komplexný sprievodca hashtable PowerShell! Dúfam, že vám to pomohlo?
Ak vám to pomohlo, zahlasujte Áno na otázku Bol tento príspevok užitočná nižšie.
Prípadne môžete položiť otázku, zanechať komentár alebo poskytnúť ďalšiu spätnú väzbu pomocou formulára Zanechať odpoveď, ktorý nájdete na konci tejto stránky.
Nakoniec, ak chcete získať viac zón PowerShell tech S, navštívte našu stránku sprievodcu Windows PowerShell ako na to. Veľmi užitočná vám môže byť aj naša stránka Práca z domova.


