„PowerShell Hashtable Ultimate“ vadovas su pavyzdžiais

2021 m. gegužės 20 d 5546 Peržiūros „PowerShell Hashtable“ jūsų galutinis vadovas su pavyzdžiais

„PowerShell“ maišos lentelė yra kolekcijos elementai ir jų vertės. Daiktai vadinami raktais. Be to, kiekvienas raktas maišos lentelėje turi lygiavertę reikšmę.





Iš esmės „PowerShell“ maišos lentelė yra raktų / reikšmių saugyklos „lentelė“.



Šioje S zonoje išmokysiu viską, ką reikia žinoti apie PowerShell maišos lenteles. Pirmajame skyriuje nagrinėjamas skirtumas tarp Hashtable ir Array.

Tada, antrame skyriuje, naudokite Tapk nariu Cmdlet, nuvesiu tave už grotelių gaubto.



Galiausiai išnagrinėsiu įvairius būdus, kaip naudoti maišos lentelės scenarijuose.



Naršykite pranešimų temas

PowerShell Hashtable vs PowerShell Array

PowerShell Hashtable vs PowerShell Array

Prieš pasinerdamas į Hashtables, noriu paaiškinti skirtumą tarp Hashtables ir Arrays. Šis skirtumas yra svarbus, nes abi sąvokos gali būti lengvai supainiotos.



Šio vadovo įžangoje paaiškinau, kad maišos lentelė yra raktų / verčių saugykla. Be to, maišos lentelė yra tarsi lentelė su raktais ir reikšmėmis.



Priešingai, „PowerShell Array“ yra vertybių arba objektų rinkinys.

Pagrindinis skirtumas tarp PowerShell hashtable ir PowerShell masyvo yra tas, kad maišos lentelė yra elementų (raktų) ir jų reikšmių rinkinys, o masyvas yra tik elementų sąrašas.

Trumpam pavyzdžiui, toliau pateikti kodai yra maišos lentelių ir masyvo pavyzdžiai – pirmasis kodas sukuria maišos lentelę, o antrasis – masyvą:

|_+_| |_+_| Iš kodų pavyzdžių matote, kad jei maišos lentelė yra įtraukta į {}, masyvas yra įtrauktas į ().

Žemiau esančioje ekrano kopijoje rodomi dviejų kodų rezultatai.

PowerShell Hashtable vs PowerShell Array

Ekrano kopijos dalis, pažymėta (1), yra maišos lentelės rezultatas. Ar matėte rakto / vertės porą?

Aukščiau pateiktame pavyzdyje rakto Root reikšmė yra C:UsersvictoDocuments. Be to, PSPProvider raktas turi reikšmę, vadinamą FileSystem.

Galiausiai, pavadinimas turi reikšmę Dokumentas.

Be to, ekrano kopijos dalis, pažymėta (2), turi masyvo kodo rezultatą. Kaip paaiškinta anksčiau, tai tik sąrašas.

PowerShell Hashtable metodai ir savybės

PowerShell Hashtable metodai ir savybės

Įžangoje pažadėjau jus nuvesti už „PowerShell Hashtables“ gaubto. Tai štai!

Šiame skyriuje išmokysiu jus naudoti Get-Member Cmdlet, kad galėtumėte pažvelgti į maišos lenteles.

Kai pateikiate PowerShell Hashtable rezultatą į Tapk nariu , galėsite peržiūrėti turimus Metodai ir Savybės iš Hashtable.

Grįžkime prie pirmojo pavyzdžio, pateikto aukščiau:

|_+_|

Nukopijuokite kodą į naują PowerShell ISE dokumentą. Tada paleiskite kodą.

chromo nuotolinis darbalaukis ir komandos stebėtojas

Tada, norėdami pamatyti galimus Metodai ir Savybės šioje maišos lentelėje paleiskite šią komandą toje pačioje PowerShell ISE.

|_+_|

Norėdami paleisti aukščiau pateiktą komandą, įklijuokite ją po paskutiniu kodu. Tada pažymėkite jį ir paspauskite F8 arba spustelėkite pažymėtą piktogramą.

PowerShell Hashtable metodai ir savybės

Komanda parodys rezultatus PowerShell konsolės srityje.

Kol kas žiūrėkite į rezultatą. Jis turi TypeName: System.Collections.Hashtable.

Tai patvirtina, kad į Get-Member Cmdlet nukreipiami objektai yra maišos lentelė!

Tolesniuose šio skyriaus poskyriuose parodysiu, kaip naudoti įprastus PowerShell maišos lentelės metodus ir savybes.

Kaip pridėti arba pašalinti elementus prie esamos Hashtable

Šiame skyriuje išmoksite pridėti naujų elementų prie esamos PowerShell maišos lentelės. Be to, taip pat sužinosite, kaip pašalinti elementą iš esamos PowerShell maišos lentelės.

Prieš pasinerdamas į tai, noriu paminėti, kad galite sukurti ir tuščią hashtable. Tada pridėkite raktų / reikšmių prie maišos lentelės – daugiau apie tai vėliau.

Grįžti prie elementų pridėjimo arba pašalinimo prie esamų PowerShell hastables – kai paleidome $hashtable | Tapk nariu komandą, vienas iš rezultate rodomų metodų yra Papildyti . Taip pat yra metodas, Pašalinti .

Peržiūrėkite paryškintas ekrano kopijos dalis žemiau:

PowerShell Hashtable metodai ir savybės

Prieš parodydamas, kaip naudoti šiuos du metodus, pažvelkime į originalų PowerShell maišos kodą:

|_+_|

Hashtable yra 3 įrašai. Šiame pavyzdyje į aplanką „Mano dokumentai“ pridėsiu kitą raktą pavadinimu „Aprašymas“ su reikšme „Maps“.

Norėdami atlikti šią užduotį, paleisiu toliau pateiktą komandą (toje pačioje PowerShell ISE konsolėje, kurioje vykdžiau ankstesnes komandas)

|_+_| Atkreipkite dėmesį, kaip aš naudojau Add Metodas . Prie kintamojo, kuriame yra maišos lentelė, pridedu tašką (.). Tada įtraukiau metodą, Papildyti , po to (). Galiausiai įtraukiau naują rakto / vertės porą, kurią noriu pridėti prie maišos lentelės.

Paleidę komandą, norėdami patvirtinti, kad pridėtas papildomas klavišas, pažymėkite $hashtable ir paspauskite F8.

|_+_|

Čia yra rezultato ekrano kopija, patvirtinanti, kad naujas raktas / vertė buvo pridėta.

Toliau galite naudoti tą patį metodą norėdami pašalinti vertę iš PowerShell maišos lentelės.

Norėdami pašalinti paskutinį raktą, kurį įtraukėme į maišos lentelę, paleiskite komandą, panašią į paskutinę komandą. Tačiau šį kartą pakeiskite Papildyti Metodas su Pašalinti Metodas.

Štai komanda:

|_+_| The Pašalinti Metodas apima tik Raktas . Nereikia įtraukti rakto vertė komandoje.

Pirmiausia paleiskite aukščiau pateiktą komandą. Tada norėdami patvirtinti, kad raktas buvo pašalintas, paryškinkite $hashtable ir paspauskite F8.

|_+_|

Komandos rezultatas patvirtina, kad raktas buvo pašalintas!

„PowerShell“ maišos lentelės metodai ir ypatybės – kaip pridėti arba pašalinti elementus prie esamos maišos lentelės

Kaip patikrinti, ar „PowerShell Hashtable“ yra raktas

Kai sujungėme žemiau esantį hastable į Tapk nariu Cmdlet, vienas iš rodomų metodų yra ContainsKey Metodas – žiūrėkite žemiau esančią ekrano kopiją.

|_+_|

The ContainsKey Metodas gali būti naudojamas labai įvairiais būdais. Tačiau vienas iš įprastų šio metodo pritaikymų yra jį naudoti norint patikrinti, ar maišos lentelėje yra raktas, o jei jo nėra, pridėkite raktą.

Kitas pritaikymas ContainsKey „PowerShell“ maišos lentelės metodas yra tiesiog jį naudoti norint patikrinti, ar maišos lentelėje yra rakto pavadinimas.

Norėdami patikrinti, ar PowerShell maišos lentelėje yra raktas, naudodami ContainsKey Metodas, paleiskite žemiau esančią komandą:

|_+_|

Ši komanda patikrina, ar raktas su pavadinimu Aprašymas yra maišos lentelėje, išsaugotoje $hashtable kintamajame. Komandos rezultatas rodomas False.

„PowerShell Hashtable“ metodai ir savybės – kaip patikrinti, ar „PowerShell Hashtable“ yra raktas

Norėdami patikrinti, ar aprašymo raktas egzistuoja prieš įtraukdami jį į „PowerShell“ maišos lentelę, mums reikės papildomos kodų eilutės prie ankstesnės komandos.

Čia yra patobulintas kodas.

|_+_|

Kodas naudoja sąlyginį sakinį IF, kad patikrintų, ar maišos lentelėje yra raktas su pavadinimu Aprašymas.

Tada, jei rezultatas yra False, IF sakinio komandų vykdymo dalyje naudojame Papildyti „PowerShell“ maišos lentelės metodas raktui pridėti prie maišos lentelės.

Tačiau jei raktas yra maišos lentelėje, IF sakinio dalyje Else rodome pranešimą, informuojantį komandą vykdžiusį asmenį, kad raktas jau yra.

Paleidę paskutinę komandą, pažymėkite $hashtable kintamąjį ir paleiskite jį atskirai. Rezultatas patvirtina, kad raktas Aprašymas buvo pridėtas prie kintamojo, nes jo nebuvo.

Norėdami patikrinti, ar šis scenarijus veikia, paleiskite jį dar kartą...

|_+_|

Šį kartą scenarijus nepridėjo rakto. Atvirkščiai, ji grąžino informaciją IF teiginio kitoje dalyje - Raktas jau yra maišos lentelėje .

„PowerShell Hashtable“ metodai ir savybės – kaip patikrinti, ar „PowerShell Hashtable“ yra raktas

Kaip konvertuoti „PowerShell Hashtable“ į eilutę

Pirmasis žingsnis konvertuojant PowerShell maišos lentelę į eilutę yra grąžinti maišos lentelės raktų reikšmes. Kitaip tariant, konvertuojate „PowerShell“ maišos lentelę į „PowerShell“ masyvą.

Norėdami grąžinti reikšmes maišos lentelėje, skambinkite Vertybės maišos lentelės nuosavybė.

geriausi stalkerio „clear sky“ modifikacijos

Štai komanda, kuri grąžina reikšmes maišos lentelėje:

|_+_|

Kai grąžinsite reikšmes PowerShell maišos lentelėje, kitas veiksmas yra $hashtable.Values ​​nukreipimas į Out-String Komanda…

|_+_| Vėliau šiame vadove suprasite, kaip svarbu „PowerShell“ maišos lentelę konvertuoti į eilutę. Norėdami pamatyti, kaip tai praktiškai taikoma realiame SysAdmin scenarijuose, skaitykite toliau.

Kaip naudoti „PowerShell Hashtable“. GetEnumerator Metodas

Kitas svarbus PowerShell maišos lentelės metodas yra GetEnumerator Metodas.

Šį metodą galite naudoti norėdami atskirti maišos lentelės raktus į atskiras eilutes. Čia yra komandos pavyzdys GetEnumerator Hashtable metodas:

|_+_|

Kaip matote iš aukščiau pateiktos komandos rezultato, raktai ir reikšmės grąžinami atskirose antraštėse. Dabar negaliu galvoti apie programą, tačiau jei kada nors reikės suskaidyti raktus PowerShell maišos lentelėje, žinote, kaip tai padaryti!

Kaip suskaičiuoti „PowerShell“ maišos elementus

Yra dar viena naudinga ypatybė, kurioje galima maišyti, Suskaičiuoti . Kaip rodo pavadinimas, ši nuosavybė pateikia maišos lentelės raktų skaičių.

Kaip Vertybės Savybė, norėdami iškviesti ypatybę „Count Property“, naudokite komandą, panašią į toliau pateiktą:

|_+_|

Komanda patvirtina, kad hashtable, $hashtable turi 4 raktus.

Kaip suskaičiuoti „PowerShell“ maišos elementus

Kaip sukurti tuščią „PowerShell“ hashtable ir pridėti raktų

Kaip sukurti tuščią „PowerShell“ hashtable ir pridėti raktų

Iki šiol visi pavyzdžiai šioje S zonoje buvo skirti manipuliuoti PowerShell maišos lentelės esamais raktais. Šiame skyriuje sužinosite, kaip sukurti tuščią maišos lentelę.

Tada pridėkite raktus prie maišos lentelės.

Norėdami sukurti tuščią „PowerShell“ grotelės lentelę, tiesiog įveskite @ ženklas, po kurio seka {} skliausteliuose. Čia yra tuščios maišos lentelės, išsaugotos kintamajame, pavyzdys, Tuščias stalas :

|_+_|

Norėdami patvirtinti, kad maišos lentelė sukurta be reikšmių, paleiskite ankstesnę komandą. Tada paleiskite kintamąjį atskirai.

|_+_|

Kitas žingsnis yra naudoti Papildyti metodą, aprašytą anksčiau šiame vadove, norėdami pridėti raktų / reikšmių prie maišos lentelės. Šiame pavyzdyje pridėsiu raktą, vadinamą vardas , kurio vertė dokumentas .

Čia yra komanda atlikti šią užduotį.

|_+_|

Galiausiai, norėdami patvirtinti, kad reikšmės buvo sėkmingai pridėtos, paleiskite kintamąjį $Emptyhashtable:

|_+_|

Paskutinė komanda patvirtina, kad reikšmės buvo sėkmingai pridėtos:

Kaip sukurti „PowerShell Hashtable“ su keliomis reikšmėmis ir vienu raktu

Kaip sukurti „PowerShell Hashtable“ su keliomis reikšmėmis ir vienu raktu

Visuose iki šiol aptartuose pavyzdžiuose „PowerShell“ maišos lentelė turi vieną rakto / vertės porą. Tačiau yra aplinkybių, kai maišos lentelėje gali tekti turėti vieną raktą su keliomis reikšmėmis.

Šiuo atveju tikrai norite sukurti maišos lentelę su masyvais kaip reikšmėmis.

Pirmiausia manau, kad geriau parodyti kodus, kuriuos naudojau atskirdamas maišos lentelę nuo masyvo.

|_+_| |_+_|

Taigi, norėdami sukurti „PowerShell“ maišos lentelę su atskirais raktais ir keliomis reikšmėmis, paleiskite scenarijų, panašų į šį:

|_+_|

Aukščiau esančiame scenarijuje LogName yra maišos raktas, o raktui priskiriamos reikšmės System, Application ir Security. Efektyviai sukūrėme vieną greitą raktą su keliomis reikšmėmis.

Norėdami išvardyti atskiras reikšmes LogName klavišą, paleiskite žemiau esančią komandą:

tiesioginės televizijos antenos apžvalgos
|_+_|

Žemiau esanti ekrano kopijos dalis, pažymėta (1), yra maišos lentelės rezultatas, $hashtableWithArrays . Be to, dalis, pažymėta (2), rodo rezultatą $hashtableWithArrays.Values komandą.

Jei esate susipažinę su „Windows“ įvykių žurnalais – sistema, programa ir sauga – yra „Windows“ įvykių žurnalų pavadinimai.

Kitame skyriuje parodysiu, kaip naudoti „PowerShell ForEach“ kilpą, kad galėtumėte kartoti aukščiau pateiktą maišos lentelę ir paleisti Gaukite įvykių žurnalą komandą šiuose 3 įvykių žurnaluose – naudojant vieną „PowerShell“ scenarijų.

Kaip kartoti „PowerShell Hashtable“ naudojant „ForEach Loop“.

Kaip pakartoti „PowerShell Hashtable“ su „ForEach“.

Paskutiniame skyriuje sukūriau vieno klavišo PowerShell maišos lentelę su keliomis reikšmėmis.

Šiame skyriuje pateiktame pavyzdyje pakeičiau kintamąjį, kuriame saugoma maišos lentelė LogNameKeys . Čia yra atnaujintas scenarijus.

|_+_|

Šiame skyriuje aš išmokysiu jus naudoti Kiekvienam norėdami peržiūrėti reikšmes, saugomas LogName klavišą ir paleiskite Gaukite įvykių žurnalą komandą.

Norėdami greitai atnaujinti PowerShell ForEach kursą, toliau pateikiama bendra PowerShell ForEach komandos sintaksė:

|_+_|

Jei taikysite pirmiau nurodytą sintaksę mūsų LogNames hashtable, atnaujinta komanda atrodys taip:

Eilutės, prasidedančios #, yra „PowerShell“ komentarai. |_+_|

Pirmoji scenarijaus dalis yra tas pats scenarijus, kuris sukuria vieno rakto PowerShell maišos lentelę su keliomis reikšmėmis. Štai scenarijus:

|_+_|

Antroje scenarijaus dalyje konvertavau ($LogNameKeys.Values) saugomas reikšmes į eilutes ir išsaugojau rezultatą kitame kintamajame, LogNameKeysAsStrings .

|_+_|

Galiausiai trečioje scenarijaus dalyje pristatoma ForEach kilpa:

|_+_|

Šioje scenarijaus dalyje nurodome „PowerShell“ paimti kiekvieną vertę, saugomą LogName Raktas ( $LogNameKeysAsStrings ) – laikinai išsaugoti tą individualią reikšmę kintamajame LogNameKey – tada naudokite laikinąjį kintamąjį, kad paleistumėte Gaukite įvykių žurnalą komandą.

Aš įtraukiau Naujausias parametras Gaukite įvykių žurnalą komandą, kurios reikšmė yra 5, kad komanda grąžintų paskutinius 5 kiekvieno įvykių žurnalo įrašus. Kai žiūrite į „PowerShell“ scenarijų, jis gali atrodyti sudėtingas. Tačiau jei atidžiai įsižiūrėsite, tai dažniausiai labai paprasta.

Dabar nukopijuokite toliau pateiktą scenarijų į naują PowerShell ISE dokumentą ir paleiskite jį.

Atidarykite „PowerShell ISE“ kaip administratorių. Jei neatidarysite PowerShell ISE kaip administratorius, gausite prieigos klaidų pranešimus. |_+_|

Žemiau esančioje ekrano kopijoje parodytas scenarijaus rezultatas. Rezultatų srityje yra 15 eilučių – tai 5 sistemos, programos, saugos įvykių žurnalai.

Kaip tinkinti ataskaitą naudojant „PowerShell Hashtable“ ir „Select-Object“.

Kaip tinkinti ataskaitą naudojant „PowerShell Hashtable“ ir „Select-Object“.

Paskutiniame skyriuje sukūrėme „PowerShell“ scenarijų, kuris ištraukia „Windows“ įvykių žurnalo ataskaitą. Čia yra ataskaitos ekrano kopija

Numatytoji scenarijaus išvestis turi 5 stulpelius – Indeksas , Laikas , Įrašo tipas , Šaltinis , InstanceID , ir Pranešimas . Jei siunčiate tai kaip ataskaitą, galbūt norėsite pakeisti šių stulpelių pavadinimus į lengvai suprantamus pavadinimus.

Štai scenarijus iš paskutinės dalies.

android 7.1.1 atsisiųsti zip failą
Scenarijus buvo šiek tiek pakeistas. Dabar turiu kintamąjį, EventLogReport kuri išsaugo ForEach ciklo išvestį. Kodėl to reikia, paaiškinsiu vėliau. |_+_|

Norėdami pakeisti šio scenarijaus stulpelių antraščių pavadinimus, sujungsime Gaukite įvykių žurnalą komandą a Select-Object komandą.

Tada sukurkite „PowerShell“ maišos lentelę Select-Object komanda, kuri pakeičia stulpelių pavadinimus. Čia yra pakeistas scenarijus, kuris atlieka magiją.

|_+_|

Scenarijus atrodo daug sudėtingesnis, nei yra iš tikrųjų. Tačiau, jei sutelksite dėmesį į scenarijaus dalį po Select-Object, bus lengva pastebėti skirtumą tarp šio scenarijaus ir ankstesnės kopijos.

Konkrečiai, aš įtraukiau hashtables į Select-Object kodo blokas. Kiekviena hashtable tinkina išvestį Gaukite įvykių žurnalą komandą.

Čia yra maišos lentelės pavyzdys iš Select-Object blokas:

|_+_|

Kaip įprasta, „PowerShell“ maišos lentelė turi du elementus. Svarbiausia yra vardas , vertė yra Išraiška .

Kitas svarbus dalykas, į kurį reikia atkreipti dėmesį, yra tai, kad kiekvienos maišos lentelės pabaigoje Select-Object blokas, yra kablelis (,).

Galiausiai čia yra galutinio scenarijaus PowerShell rezultatas:

Anksčiau pažadėjau paaiškinti, kodėl pristatau $EventLogReport kintamąjį, kad išsaugotumėte ForEach ciklo išvestį. Be šio kintamojo galutiniame rezultate bus rodomi 3 atskiri kiekvieno iš 3 įvykių žurnalų rezultatai. Tačiau, saugodamas visus rezultatus kintamajame, galėjau perkelti šį kintamąjį į Format-Table – tai rodo visą rezultatą kaip vieną lentelę. Štai komanda, kuri atliko magiją. |_+_|

Kaip eksportuoti „PowerShell Hashtable“ į CSV

Kaip eksportuoti „PowerShell Hashtable“ į CSV

Šiame paskutiniame skyriuje sužinosite, kaip eksportuoti PowerShell maišos lentelę į CSV.

Pirmajame šios skilties pavyzdyje parodysiu, kaip eksportuoti šią hashtabelę į CSV.

|_+_|

Norėdami sėkmingai eksportuoti šią PowerShell maišos lentelę į CSV failą, turite naudoti GetEnumerator Vertybių sąrašo metodas (aptartas anksčiau). Priešingu atveju tikrosios rakto/reikšmių poros nebus eksportuojamos.

Čia yra pakeistas scenarijus, kuris eksportuoja maišos lentelę, išsaugotą hashtable kintamasis į CSV failą.

|_+_|

Pristatome toliau pateiktą scenarijų:

|_+_|

Scenarijus apima GetEnumerator Metodas maišos lentelėje. Tada vamzdžiai išvestis į Select-Object komandą.

Galiausiai, aš vamzdžiu išvestis Select-Object komandą į Eksportuoti-Csv komandą. Norėdami sužinoti daugiau apie tai, kaip naudoti Eksportuoti-Csv Cmdlet, perskaitykite mūsų vadovą – Powershell NoTypeInformation: Programos ir pavyzdžiai .

Kai paleidžiate šį scenarijų, jis sukuria CSV failą, vadinamą hashtable.csv , jūsų nurodytu keliu. Žiūrėkite toliau pateiktą ekrano kopiją, kad sužinotumėte CSV failo išvestį.

|_+_|

Antrame pavyzdyje aš eksportuosiu paskutiniame skyriuje sukurto scenarijaus išvestį - įvykių žurnalo scenarijų - į CSV failą.

Štai scenarijus. Norėdami eksportuoti ataskaitą į CSV, šio scenarijaus pabaigoje pridėjau kodą po šiuo.

|_+_| |_+_|

Kodas perduoda išvestį Kiekvienam kilpa – išsaugota EventLogReport kintamasis – į Eksporto-Csv komanda . Sugeneruotas CSV failas rodomas toliau esančioje ekrano kopijoje.

Štai viskas – išsamus „PowerShell“ maišos lentelės vadovas! Tikiuosi, kad jums tai buvo naudinga?

Jei jums tai buvo naudinga, balsuokite Taip į Ar šis įrašas buvo naudingas klausimas.

Arba galite užduoti klausimą, palikti komentarą arba pateikti daugiau atsiliepimų naudodami formą Palikite atsakymą, esančią šio puslapio pabaigoje.

Galiausiai, norėdami sužinoti daugiau „PowerShell“ technologijų S zonų, apsilankykite mūsų „Windows PowerShell“ vadovo puslapyje. Taip pat jums gali būti labai naudingas mūsų puslapis „Work from Home“.

Literatūra ir tolesnis skaitymas

  1. Viskas, ką norėjote žinoti apie groteles
  2. Sujunkite masyvus ir maišos lenteles „PowerShell“, kad pasilinksmintumėte ir gautumėte pelno
  3. Apie maišos lenteles