PowerShell Hashtable Ultimate Guide s primeri

20. maja 2021 5546 Pogledi PowerShell Hashtable Vaš vrhunski vodnik s primeri

Razpršilna tabela PowerShell je elementi zbirke in njihove vrednosti. Predmeti se imenujejo ključi. Poleg tega ima vsak ključ v hashtable enakovredno vrednost.





V bistvu je hashtable PowerShell 'tabela' shranjevanja ključev/vrednosti.



V tem območju S vas bom naučil vsega, kar morate vedeti o hashtables PowerShell. Prvi razdelek raziskuje razliko med Hashtable in nizom.

Nato v drugem razdelku z uporabo Get-member Cmdlet, popeljal vas bom za pokrov hashtabel.



Na koncu bom raziskal različne načine uporabe hashtabel pri skriptiranju.



Brskajte po temah objav

avast z uporabo celotnega pomnilnika

PowerShell Hashtable proti PowerShell Array

PowerShell Hashtable proti PowerShell Array

Preden se potopim v Hashtables, želim razložiti razliko med Hashtables in Arrays. To razlikovanje je pomembno, saj se lahko oba pojma zlahka zamenjata.



V uvodu tega priročnika sem pojasnil, da je hashtable shramba ključ/vrednost. Poleg tega je hashtable kot tabela s ključi in vrednostmi.



Nasprotno, polje PowerShell je zbirka vrednosti ali predmetov.

Glavna razlika med razpršilno tabelo PowerShell in matriko PowerShell je v tem, da je hashtable zbirka elementov (ključev) in njihovih vrednosti – medtem ko je matrika le seznam elementov.

Za hiter primer so spodnje kode primeri hashtables in matrike – prva koda ustvari hashtables, medtem ko druga koda ustvari matriko:

|_+_| |_+_| Iz primerov kode lahko vidite, da je razpršilna tabela zaprta v {}, matrika pa je zaprta v ().

Spodnji posnetek zaslona prikazuje rezultate dveh kod.

PowerShell Hashtable proti PowerShell Array

Del posnetka zaslona z oznako (1) je rezultat hashtable. Ste videli par ključ/vrednost?

V zgornjem primeru ima ključ Root vrednost C:UsersvictoDocuments. Tudi ključ PSProvider ima vrednost, imenovano FileSystem.

Končno ima ime vrednost Document.

Poleg tega ima del posnetka zaslona z oznako (2) rezultat kode matrike. Kot je bilo že pojasnjeno, je to le seznam.

Metode in lastnosti Hashtable PowerShell

Metode in lastnosti Hashtable PowerShell

V uvodu sem obljubil, da vas bom popeljal za pokrov PowerShell Hashtables. To je to!

V tem razdelku vas bom naučil, kako uporabiti ukaz Get-Member za pregledovanje hashtabel.

Ko pošljete rezultat PowerShell Hashtable v Get-member , boste lahko pregledali razpoložljivo Metode in Lastnosti Hashtable.

Vrnimo se k našemu prvemu zgornjemu primeru hastable:

|_+_|

Kopirajte kodo v nov dokument PowerShell ISE. Nato zaženite kodo.

Potem, da vidite na voljo Metode in Lastnosti v tej razpredelnici zaženite ta ukaz v istem PowerShell ISE.

|_+_|

Če želite zagnati zgornji ukaz, ga prilepite pod zadnjo kodo. Nato ga označite in pritisnite F8 ali kliknite označeno ikono.

Metode in lastnosti Hashtable PowerShell

Ukaz bo prikazal rezultate v podoknu konzole PowerShell.

Za zdaj si oglejte rezultat. Ima TypeName: System.Collections.Hashtable.

To potrjuje, da so predmeti, poslani v ukazni ukaz Get-Member, Hashtable!

V naslednjih pododdelkih tega razdelka vam bom pokazal, kako uporabljati običajne metode in lastnosti hashtable PowerShell.

Kako dodati ali odstraniti elemente v obstoječo Hashtable

V tem razdelku se boste naučili dodajati nove elemente obstoječi razpredelnici PowerShell. Poleg tega se boste naučili tudi, kako odstraniti element iz obstoječe razpršene tabele PowerShell.

Preden se poglobim v to, želim omeniti, da lahko ustvarite tudi prazno hashtable. Nato dodajte ključe/vrednosti v hashtable – več o tem kasneje.

Nazaj k dodajanju ali odstranjevanju elementov v obstoječe razpredelnice PowerShell – ko smo zagnali $hashtable | Get-member ukaz, ena od metod, prikazanih v rezultatu, je Dodaj . Obstaja tudi metoda, Odstrani .

Oglejte si označene dele posnetka zaslona spodaj:

Metode in lastnosti Hashtable PowerShell

Preden vam pokažem, kako uporabljati ti dve metodi, si oglejmo izvirno kodo hashtable PowerShell:

|_+_|

Hashtable ima 3 vnose. V tem primeru bom v svojo mapo »Moji dokumenti« dodal še en ključ z imenom Opis z vrednostjo Zemljevidi.

Za dokončanje te naloge bom zagnal spodnji ukaz (na isti konzoli PowerShell ISE, na kateri sem zagnal prejšnje ukaze)

|_+_| Upoštevajte, kako sem uporabil Add Metoda . Zraven spremenljivke, ki vsebuje hashtable, dodam piko (.). Nato sem vključil metodo, Dodaj , ki mu sledi (). Nazadnje sem vključil nov par ključ/vrednost, ki ga želim dodati v hashtable.

Ko zaženete ukaz, označite, da potrdite, da je bil dodatni ključ dodan $hashtable in pritisnite F8.

|_+_|

Tukaj je posnetek zaslona rezultata, ki potrjuje, da je bil dodan nov ključ/vrednost.

Če nadaljujemo, lahko uporabite isti pristop za odstranitev vrednosti iz razpršilne tabele PowerShell.

Če želite odstraniti zadnji ključ, ki smo ga dodali v hashtable, zaženite ukaz, podoben zadnjemu ukazu. Tokrat pa zamenjaj Dodaj Metoda z Odstrani Metoda.

Tukaj je ukaz:

Windows 10 zaženi Explorer kot skrbnik
|_+_| The Odstrani Metoda vključuje samo ključ . Ključa vam ni treba vključiti vrednost v ukazu.

Najprej zaženite zgornji ukaz. Nato označite, da potrdite, da je bil ključ odstranjen $hashtable in pritisnite F8.

|_+_|

Rezultat ukaza potrjuje, da je bil ključ odstranjen!

Metode in lastnosti hashtable PowerShell - kako dodati ali odstraniti elemente v obstoječo hashtable

Kako preveriti, ali Hashtable PowerShell vsebuje ključ

Ko smo spodnjo hastable napeljali na Get-member Cmdlet, ena od prikazanih metod je ContainsKey Metoda – glejte spodnji posnetek zaslona.

|_+_|

The ContainsKey Metodo je mogoče uporabiti na toliko načinov. Vendar pa je ena od pogostih aplikacij te metode uporaba te metode za preverjanje, ali ključ obstaja v razpršilni tabeli, in če ne, dodajte ključ.

Še ena aplikacija ContainsKey Metoda razpršitvene tabele PowerShell je, da jo preprosto uporabite za preverjanje, ali ime ključa obstaja v hashtable.

Če želite preveriti, ali ključ obstaja v razpršilni tabeli PowerShell z uporabo ContainsKey Metoda, zaženite spodnji ukaz:

|_+_|

Ta ukaz preveri, ali ključ z imenom Opis obstaja v hashtable, shranjeni v spremenljivki $hashtable. Rezultat ukaza se prikaže False.

Metode in lastnosti PowerShell Hashtable - Kako preveriti, ali PowerShell Hashtable vsebuje ključ

Če želite preveriti, ali ključ Opis obstaja, preden ga dodate v hashtable PowerShell, bomo potrebovali dodatno vrstico kod prejšnjega ukaza.

Tukaj je izboljšana koda.

|_+_|

Koda uporablja pogojni stavek IF, da preveri, ali ključ z imenom Opis obstaja v razpršilni tabeli.

Nato, če je rezultat False, v delu za izvajanje ukaza stavka IF uporabimo Dodaj Metoda hashtable PowerShell za dodajanje ključa v hashtable.

Če pa ključ obstaja v razpredelnici, v delu Else stavka IF prikažemo sporočilo, ki osebi, ki je izvedela ukaz, obvestimo, da ključ že obstaja.

Ko zaženete zadnji ukaz, označite $hashtable spremenljivko in jo zaženite sam. Rezultat potrjuje, da je bil ključ Opis dodan spremenljivki, ker ni obstajala.

Če želite preveriti, ali ta skript deluje - zaženite ga znova ...

|_+_|

Tokrat skript ni dodal ključa. Namesto tega je vrnil informacije v delu Else izjave IF – Ključ že obstaja v hashtable .

Metode in lastnosti PowerShell Hashtable - Kako preveriti, ali PowerShell Hashtable vsebuje ključ

Kako pretvoriti Hashtable PowerShell v niz

Prvi korak za pretvorbo PowerShell Hashtable v niz je vrnitev vrednosti ključev v hashtable. Z drugimi besedami, pretvorite hashtable PowerShell v polje PowerShell.

Če želite vrniti vrednosti v hashtable, pokličite Vrednote lastnost hashtable.

Tukaj je ukaz, ki vrne vrednosti v hashtable:

|_+_|

Ko vrnete vrednosti v razpršilni tabeli PowerShell, je naslednji korak, da prenesete vrednost $hashtable.Values ​​v Out-String povej…

|_+_| Kasneje v tem priročniku boste cenili pomen pretvorbe razpršilne tabele PowerShell v niz. Če želite videti praktično uporabo tega v resničnem skriptnem sistemu SysAdmin, preberite naprej.

Kako uporabljati Hashtable PowerShell GetEnumerator Metoda

Druga pomembna metoda hashtable PowerShell je GetEnumerator Metoda.

To metodo lahko uporabite za ločevanje ključev v razpršilni tabeli na posamezne nize. Tukaj je vzorec ukaza za GetEnumerator Metoda hashtable:

|_+_|

Kot lahko vidite iz rezultata zgornjega ukaza, so ključi in vrednosti vrnjeni v posameznih glavah. Zdaj si ne morem zamisliti aplikacije, če pa boste kdaj morali razbiti ključe v razpršilni tabeli PowerShell, veste, kako to storiti!

Kako prešteti elemente Hashtable PowerShell

Obstaja še ena uporabna lastnost hashtable, štetje . Kot pove že ime, ta lastnost vrne število ključev v hashtable.

Kot Vrednote Lastnost, da pokličete lastnost Count, uporabite ukaz, podoben spodnjemu:

|_+_|

Ukaz potrdi, da ima hashtable, $hashtable 4 ključe.

Kako prešteti elemente Hashtable PowerShell

Kako ustvariti prazno PowerShell Hashtable in dodati ključe

Kako ustvariti prazno PowerShell Hashtable in dodati ključe

Doslej so se vsi primeri v tem območju S osredotočali na manipulacijo razpršitve PowerShell z obstoječimi ključi. V tem razdelku se boste naučili, kako ustvariti prazno hashtable.

Nato dodajte ključe v hashtable.

Če želite ustvariti prazno hashtable PowerShell, preprosto vnesite @ znak, ki mu sledi {} oklepaji. Tukaj je primer prazne hashtable, shranjene v spremenljivki, Prazna tabela :

|_+_|

Če želite potrditi, da je razpredelnica ustvarjena brez vrednosti, zaženite prejšnji ukaz. Nato zaženite spremenljivko samostojno.

|_+_|

Naslednji korak je uporaba Dodaj metodo, opisano prej v tem priročniku, za dodajanje ključev/vrednosti v hashtable. V tem primeru bom dodal ključ, imenovan ime , z vrednostjo dokument .

kako vstaviti sim kartico v galaxy s6 -

Tukaj je ukaz za izvedbo te naloge.

|_+_|

Končno, da potrdite, da so bile vrednosti uspešno dodane, zaženite spremenljivko $Emptyhashtable:

|_+_|

Zadnji ukaz potrjuje, da so bile vrednosti uspešno dodane:

Kako ustvariti PowerShell Hashtable z več vrednostmi in enim ključem

Kako ustvariti PowerShell Hashtable z več vrednostmi in enim ključem

V vseh primerih, ki smo jih obravnavali do sedaj, ima razpršena tabela PowerShell en par ključ/vrednost. Vendar pa obstajajo okoliščine, ko boste morda morali imeti en ključ v razpršilni tabeli z več vrednostmi.

V tem primeru dejansko želite ustvariti hashtable z nizi kot vrednostmi.

Za začetek mislim, da je bolje, da vam pokažem kode, ki sem jih uporabil za razlikovanje hashtable od matrike.

|_+_| |_+_|

Torej, če želite ustvariti hashtable PowerShell z enojnimi ključi in več vrednostmi, zaženite skript, podoben temu:

|_+_|

V zgornjem scenariju, LogName je ključ hashtable, medtem ko so vrednosti Sistem, Aplikacija in Varnost dodeljene ključu. V bistvu smo ustvarili en sam hitri ključ z več vrednostmi.

Če želite navesti posamezne vrednosti v LogName tipko, zaženite spodnji ukaz:

|_+_|

Del spodnjega posnetka zaslona z oznako (1) je rezultat hashtable, $hashtableWithArrays . Poleg tega del z oznako (2) prikazuje rezultat $hashtableWithArrays.Values ukaz.

Če poznate dnevnike dogodkov Windows – sistem, aplikacije in varnost – so imena dnevnikov dogodkov Windows.

V naslednjem razdelku vam bom pokazal, kako uporabiti zanko PowerShell ForEach za iteracijo po zgornji razpredelnici – in zagnati Get-EventLog ukaz za te 3 dnevnike dogodkov – z enim samim skriptom PowerShell.

Kako ponoviti PowerShell Hashtable z zanko ForEach

Kako ponoviti PowerShell Hashtable s ForEach

V zadnjem razdelku sem ustvaril hashtable PowerShell z enim ključem z več vrednostmi.

Za primer v tem razdelku sem spremenljivko, ki je shranila hashtable, spremenil v LogNameKeys . Tukaj je posodobljen skript.

|_+_|

V tem razdelku vas bom naučil, kako uporabljati Za vsakogar za zanko skozi vrednosti, shranjene v LogName tipko in zaženite Get-EventLog ukaz.

Za hiter osvežitveni tečaj o PowerShell ForEach je spodaj splošna sintaksa ukaza PowerShell ForEach:

|_+_|

Če zgornjo sintakso uporabite za naš LogNames hashtable, bo posodobljen ukaz videti takole:

Vrstice, ki se začnejo s #, so komentarji PowerShell. |_+_|

Prvi del skripta je isti skript, ki ustvari hashtable PowerShell z enim ključem z več vrednostmi. Tukaj je skript:

|_+_|

V drugem delu skripta sem pretvoril vrednosti, shranjene v ($LogNameKeys.Values), v nize in rezultat shranil v drugo spremenljivko, LogNameKeysAsStrings .

|_+_|

Nazadnje, v tretjem delu skripta je predstavljena zanka ForEach:

|_+_|

V tem delu skripta povemo PowerShell, naj prevzame vsako vrednost, shranjeno v LogName ključ ( $LogNameKeysAsStrings ) – to posamezno vrednost začasno shrani v spremenljivko LogNameKey – nato uporabite časovno spremenljivko za zagon Get-EventLog ukaz.

Vključil sem Najnovejše parameter Get-EventLog ukaz z vrednostjo 5, tako da ukaz vrne zadnjih 5 vnosov vsakega dnevnika dogodkov. Ko pogledate skript PowerShell, se lahko zdi zapleten. Vendar, če pogledate natančno, je običajno zelo enostavno.

Zdaj kopirajte spodnji skript v nov dokument PowerShell ISE in ga zaženite.

Odprite PowerShell ISE kot skrbnik. Če ne odprete PowerShell ISE kot skrbnik, boste prejeli sporočila o napakah pri dostopu. |_+_|

Spodnji posnetek zaslona prikazuje rezultat skripta. V podoknu z rezultati je 15 vrstic, ki predstavljajo 5 sistemskih, aplikacijskih, varnostnih dnevnikov dogodkov.

Kako prilagoditi poročilo s Hashtable PowerShell in Select-Object

Kako prilagoditi poročilo s Hashtable PowerShell in Select-Object

V zadnjem razdelku smo ustvarili skript PowerShell, ki potegne poročilo dnevnika dogodkov Windows. Tukaj je posnetek zaslona poročila

Privzeti izhod skripta ima 5 stolpcev – Indeks , Čas , EntryType , Vir , InstanceID , in Sporočilo . Če to pošiljate kot poročilo, boste morda želeli spremeniti imena teh stolpcev v imena, ki bodo zlahka razumljiva.

Tukaj je skript iz zadnjega razdelka.

Scenarij je bil nekoliko spremenjen. Zdaj imam spremenljivko, EventLogReport ki shrani izhod zanke ForEach. Zakaj je to potrebno, bom pojasnil kasneje. |_+_|

Če želite spremeniti imena naslovov stolpcev iz tega skripta, bomo po cevi Get-EventLog ukaz a Izberite predmet ukaz.

Nato ustvarite razpršilno tabelo PowerShell znotraj Izberite predmet ukaz, ki spreminja imena stolpcev. Tukaj je spremenjen skript, ki izvaja čarovnijo.

|_+_|

Scenarij se zdi veliko bolj zapleten, kot je v resnici. Če pa se osredotočite na del skripta za Select-Object, boste zlahka opazili razliko med tem skriptom in prejšnjo kopijo.

padci 4 sprememba pov

Natančneje, sem vključil hashtables v Izberite predmet blok kode. Vsaka hashtable prilagodi izhod Get-EventLog ukaz.

Tukaj je vzorec hashtable iz Izberite predmet blok:

|_+_|

Kot običajno ima hashtable PowerShell dva elementa. Ključ je v ime , vrednost je Izraz .

Druga pomembna stvar, ki jo je treba upoštevati, je, da na koncu vsake razpredelnice v Izberite predmet blok, je vejica (,).

Končno, tukaj je rezultat končnega skripta v PowerShell:

Prej sem obljubil, da bom pojasnil, zakaj sem predstavil $EventLogReport spremenljivka, da shranite izhod zanke ForEach. Brez te spremenljivke bo končni rezultat prikazal 3 posamezne rezultate za vsakega od 3 dnevnikov dogodkov. Vendar pa sem lahko s shranjevanjem celotnih rezultatov v spremenljivko to spremenljivko prenesel v obliko tabele – to prikaže celoten rezultat kot eno samo tabelo. Tukaj je ukaz, ki je izvedel čarovnijo. |_+_|

Kako izvoziti PowerShell Hashtable v CSV

Kako izvoziti PowerShell Hashtable v CSV

V tem zadnjem razdelku se boste naučili, kako izvoziti hashtable PowerShell v CSV.

V svojem prvem primeru za ta razdelek vam bom pokazal, kako izvoziti to hashtabe v CSV.

|_+_|

Če želite uspešno izvoziti to hashtable PowerShell v datoteko CSV, morate uporabiti GetEnumerator Metoda (o kateri smo že govorili) za seznam vrednosti. V nasprotnem primeru dejanski pari ključ/vrednost ne bodo izvoženi.

Tukaj je spremenjen skript, ki izvozi hashtable, shranjeno v hashtable spremenljivko v datoteko CSV.

|_+_|

In predstavil spodnji skript:

|_+_|

Scenarij vključuje GetEnumerator Metoda v hashtable. Nato izhod napelje na Izberite predmet ukaz.

Na koncu pošljem izhod Izberite predmet ukaz za Export-Csv ukaz. Če želite prebrati več o uporabi Export-Csv Cmdlet, preberite naš vodič – Powershell NoTypeInformation: aplikacije in primeri.

Ko zaženete ta skript, ustvari datoteko CSV z imenom hashtable.csv , na poti, ki ste jo določili. Za izhod datoteke CSV si oglejte spodnji posnetek zaslona.

|_+_|

V mojem drugem primeru bom izvozil izhod skripta, ki smo ga ustvarili v zadnjem razdelku – skript dnevnika dogodkov – v datoteko CSV.

Tukaj je scenarij. Za izvoz poročila v CSV sem dodal kodo pod to na koncu tega skripta.

|_+_| |_+_|

Koda oddaja izhod Za vsakogar zanka – shranjena v EventLogReport spremenljivka – na Ukaz Export-Csv . Ustvarjena datoteka CSV je prikazana na spodnjem posnetku zaslona.

To je to – izčrpen vodnik o razpredelnici PowerShell! Upam, da vam je bilo v pomoč?

Če se vam zdi v pomoč, vljudno glasujte da na spodnje vprašanje Ali je bila ta objava koristna.

Lahko pa postavite vprašanje, pustite komentar ali pošljete več povratnih informacij z obrazcem za pustite odgovor na koncu te strani.

Nazadnje, za več PowerShell tech S con obiščite našo stran z navodili za Windows PowerShell. Morda vam bo v veliko pomoč tudi naša stran Delo od doma.

Reference in dodatno branje

  1. Vse, kar ste želeli vedeti o hashtables
  2. Združite matrike in hash tabele v PowerShell za zabavo in dobiček
  3. O Hash tabelah