PowerShell Hashtable Ultimate Guide 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
- Metode in lastnosti Hashtable PowerShell
- Kako ustvariti prazno PowerShell Hashtable in dodati ključe
- Kako ustvariti PowerShell Hashtable z več vrednostmi in enim ključem
- Kako ponoviti PowerShell Hashtable z zanko ForEach
- Kako prilagoditi poročilo s Hashtable PowerShell in Select-Object
- Kako izvoziti PowerShell Hashtable v CSV
- Reference in dodatno branje
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.
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
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.
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:
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!
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.
Č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 .
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 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
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
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
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
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.