PowerShell Hashtable Ultimate útmutató példákkal
A PowerShell hashtable egy gyűjteményi elem és értékeik. Az elemeket kulcsoknak nevezzük. Ezenkívül a hashtable minden kulcsának azonos értéke van.
Lényegében a PowerShell hashtable egy kulcs/érték tároló „tábla”.
Ebben az S zónában mindent megtanítok, amit a PowerShell hashtable-okról tudnia kell. Az első rész a Hashtable és a Array közötti különbséget vizsgálja.
Ezután a második részben használja a Get-tag Cmdlet, elviszlek a hashtables burkolata mögé.
Végül megvizsgálom a hashtable-ok szkriptekben való használatának különböző módjait.
Böngésszen a bejegyzések témái között
- PowerShell Hashtable vs PowerShell Array
- PowerShell Hashtable-módszerek és -tulajdonságok
- Üres PowerShell Hashtable létrehozása és kulcsok hozzáadása
- PowerShell Hashtable létrehozása több értékkel és egy kulccsal
- A PowerShell Hashtable ismétlése a ForEach Loop segítségével
- Jelentés testreszabása PowerShell Hashtable és Select-Object segítségével
- PowerShell Hashtable exportálása CSV-be
- Hivatkozások és további olvasmányok
PowerShell Hashtable vs PowerShell Array
Mielőtt belemerülnék a Hashtables-ba, szeretném elmagyarázni a különbséget a Hashtables és a Arrays között. Ez a különbségtétel fontos, mivel a két fogalom könnyen összekeverhető.
Az útmutató bevezetőjében elmagyaráztam, hogy a hashtable egy kulcs/érték tároló. Ezenkívül a hashtable olyan, mint egy kulcsokat és értékeket tartalmazó táblázat.
Éppen ellenkezőleg, a PowerShell-tömb értékek vagy objektumok gyűjteménye.
Az elsődleges különbség a PowerShell hashtable és a PowerShell tömb között az, hogy a hashtable elemek (kulcsok) és értékeik gyűjteménye – míg a tömb csak elemek listája.
Egy gyors példa kedvéért, az alábbi kódok egy hashtables és egy tömb példái – az első kód egy hashtablet, míg a második kód egy tömböt hoz létre:
|_+_| |_+_| A kódpéldákból láthatja, hogy míg egy hashtable a {} közé, egy tömb a () közé van zárva.Az alábbi képernyőképen látható a két kód eredménye.
A képernyőkép (1) feliratú része a hashtable eredménye. Láttad a kulcs/érték párt?
A fenti példában a Root kulcs értéke C:UsersvictoDocuments. Ezenkívül a PSProvider kulcsnak van egy FileSystem nevű értéke.
Végül a Név értéke Dokumentum.
Továbbá a képernyőkép (2) feliratú része tartalmazza a tömbkód eredményét. Mint korábban kifejtettük, ez csak egy lista.
PowerShell Hashtable-módszerek és -tulajdonságok
A bevezetőben megígértem, hogy elviszlek a PowerShell Hashtables motorháztetője mögé. Ez az!
Ebben a részben megtanítom, hogyan használhatja a Get-Member parancsmagot a hashtable-ok mögé való betekintéshez.
Amikor egy PowerShell Hashtable eredményét átadja a Get-tag , akkor áttekintheti az elérhető Mód és Tulajdonságok a Hashtable.
Térjünk vissza a fenti első gyors példánkhoz:
|_+_|Másolja a kódot egy új PowerShell ISE dokumentumba. Ezután futtassa a kódot.
Ezután a rendelkezésre álló lehetőségek megtekintéséhez Mód és Tulajdonságok ebben a hashtable-ban futtassa ezt a parancsot ugyanazon a PowerShell ISE-n.
|_+_|A fenti parancs futtatásához illessze be az utolsó kód alá. Ezután jelölje ki, és nyomja meg az F8 billentyűt, vagy kattintson a kiemelt ikonra.
A parancs megjeleníti az eredményeket a PowerShell-konzol panelen.
Egyelőre nézze meg az eredményt. Típusnévvel rendelkezik: System.Collections.Hashtable.
Ez megerősíti, hogy a Get-Member parancsmagba bevitt objektumok egy hashtable!
A szakasz következő alszakaszaiban bemutatom, hogyan kell használni a PowerShell hashtable általános módszereit és tulajdonságait.
Elemek hozzáadása vagy eltávolítása a meglévő hashtable-hoz
Ebben a szakaszban megtudhatja, hogyan adhat hozzá új elemeket egy meglévő PowerShell hashtablehoz. Ezenkívül azt is megtudhatja, hogyan távolíthat el egy elemet egy meglévő PowerShell hashtableból.
Mielőtt belemerülnék, szeretném megemlíteni, hogy létrehozhat üres hashtablet is. Ezután adjon hozzá kulcsokat/értékeket a hashtable-hoz – erről később.
Vissza a meglévő PowerShell hastables elemek hozzáadásához vagy eltávolításához – amikor futtattuk a $hashtable | Get-tag parancsot, az eredményben megjelenő metódusok egyike a Hozzáadás . Van olyan módszer is, Távolítsa el .
Tekintse meg az alábbi képernyőkép kiemelt részeit:
Mielőtt bemutatnám, hogyan kell használni ezt a két módszert, nézzük meg az eredeti PowerShell hashtable kódot:
|_+_|A hashtable 3 bejegyzést tartalmaz. Ebben a példában hozzáadok egy másik kulcsot Leírás néven Maps értékkel a „Dokumentumoim” mappához.
A feladat végrehajtásához lefuttatom az alábbi parancsot (ugyanazon a PowerShell ISE konzolon, amelyen az előző parancsokat is futtattam)
|_+_| Jegyezze meg, hogyan használtam az Add Módszer . A hashtable-t tartalmazó változó mellé egy pontot (.) adok. Aztán felvettem a módszert, Hozzáadás , majd a (). Végül felvettem az új kulcs/érték párt, amelyet hozzá szeretnék adni a hashtable-hoz.A parancs futtatása után a további kulcs hozzáadásának megerősítéséhez jelölje ki $hashtable és nyomja meg az F8-at.
|_+_|Itt van egy képernyőkép az eredményről – megerősítve, hogy az új kulcs/érték hozzáadásra került.
Továbblépve ugyanezt a megközelítést használhatja egy érték eltávolítására a PowerShell hashtable-ból.
A hashtable-hoz legutóbb hozzáadott kulcs eltávolításához futtasson az utolsó parancshoz hasonló parancsot. Ezúttal azonban cserélje ki a Hozzáadás Módszer a Távolítsa el Módszer.
Íme a parancs:
|_+_| A Távolítsa el A módszer csak a kulcs . A kulcsot nem kell mellékelni érték a parancsban.Először futtassa a fenti parancsot. Ezután jelölje ki a kulcs eltávolításának megerősítéséhez $hashtable és nyomja meg az F8-at.
|_+_|A parancs eredménye megerősíti, hogy a kulcsot eltávolították!
Hogyan ellenőrizhető, hogy a PowerShell hashtable tartalmaz-e kulcsot
Amikor a lenti hastablet csöveztük a Get-tag Cmdlet, az egyik megjelenített metódus a ContainsKey Módszer – lásd az alábbi képernyőképet.
|_+_|
A ContainsKey A módszert nagyon sokféleképpen lehet használni. Ennek a módszernek az egyik gyakori alkalmazása azonban annak ellenőrzésére, hogy létezik-e kulcs egy hashtable-ban, és ha nem, akkor adja hozzá a kulcsot.
Egy másik alkalmazása a ContainsKey A PowerShell hashtable módszere az, hogy egyszerűen használja annak ellenőrzésére, hogy létezik-e kulcsnév a hashtable-ban.
Annak ellenőrzéséhez, hogy létezik-e kulcs a PowerShell hashtable-ban, használja a ContainsKey Módszer, futtassa az alábbi parancsot:
|_+_|Ez a parancs ellenőrzi, hogy létezik-e Leírás nevű kulcs a $hashtable változóba mentett hashtable-ban. A parancs eredménye False jelenik meg.
Annak ellenőrzéséhez, hogy a Leírás kulcs létezik-e, mielőtt hozzáadnánk a PowerShell hashtable-hoz, szükségünk lesz egy további kódsorra az előző parancshoz.
Íme a javított kód.
|_+_|A kód az IF feltételes utasítást használja annak ellenőrzésére, hogy létezik-e Leírás nevű kulcs a hashtable-ban.
Ezután, ha az eredmény False, az IF utasítás parancsvégrehajtási részében használjuk a Hozzáadás A PowerShell hashtable módszere a kulcs hozzáadásához a hashtablehoz.
Ha azonban a kulcs létezik a hashtable-ban, az IF utasítás Else részében egy üzenetet jelenítünk meg, amely tájékoztatja a parancsot futtató személyt, hogy a kulcs már létezik.
Az utolsó parancs futtatása után jelölje ki a $hashtable változó, és futtassa egyedül. Az eredmény megerősíti, hogy a Leírás kulcsot hozzáadták a változóhoz, mert az nem létezett.
A szkript működésének teszteléséhez futtassa újra…
|_+_|Ezúttal a forgatókönyv nem adta hozzá a kulcsot. Inkább az IF utasítás Else részében található információkat adta vissza – A kulcs már létezik a hashtable-ban .
PowerShell Hashtable konvertálása karakterláncsá
A PowerShell-hashtable karakterláncsá alakításának első lépése a kulcsok értékeinek visszaadása a hashtable-ban. Más szavakkal, a PowerShell hashtable-t PowerShell-tömbbé alakítja.
Ha az értékeket hashtable-ban szeretné visszaadni, hívja a Értékek a hashtable tulajdonsága.
Ez a parancs, amely visszaadja az értékeket egy hashtable-ban:
|_+_|Miután visszaadta az értékeket egy PowerShell hashtable-ban, a következő lépés a $hashtable.Values továbbítása a Out-String Parancs…
|_+_| Az útmutató későbbi részében értékelni fogja a PowerShell hashtable karakterláncsá alakításának fontosságát. Ha látni szeretné ennek gyakorlati alkalmazását a valós SysAdmin szkriptekben, olvasson tovább.A PowerShell Hashtable használata GetEnumerator Módszer
A PowerShell hashtable másik fontos módszere a GetEnumerator Módszer.
Ezzel a módszerrel szétválaszthatja a hashtable kulcsait egyedi karakterláncokra. Íme egy példa parancs a GetEnumerator A hashtable módszere:
|_+_|Amint a fenti parancs eredményéből látható, a kulcsok és értékek egyedi fejlécekben jelennek meg. Nem tudok most alkalmazásra gondolni, de ha valaha is fel kell törnie a kulcsokat egy PowerShell hashtable-ban, akkor tudja, hogyan kell ezt megtenni!
PowerShell Hashtable elemek számlálása
Van még egy hasznos hashtable tulajdonság, Számol . Ahogy a név is sugallja, ez a tulajdonság a hashtable kulcsainak számát adja vissza.
Mint a Értékek Property, a Count Property hívásához használjon az alábbihoz hasonló parancsot:
|_+_|A parancs megerősíti, hogy a $hashtable hashtable 4 kulcsot tartalmaz.
Üres PowerShell Hashtable létrehozása és kulcsok hozzáadása
Eddig ebben az S zónában az összes példa a PowerShell hashtable meglévő kulcsokkal történő manipulálására összpontosított. Ebben a részben megtudhatja, hogyan hozhat létre üres hashtablet.
Ezután adjon hozzá kulcsokat a hashtable-hoz.
Üres PowerShell hashtable létrehozásához egyszerűen írja be a @ jel, majd utána {} zárójelben. Íme egy példa egy változóba mentett üres hashtablera, Üres asztal :
fortnite összeomlik indításkor|_+_|
Ha meg szeretné győződni arról, hogy a hashtable érték nélkül jött létre, futtassa az előző parancsot. Ezután futtassa a változót önmagában.
|_+_|A következő lépés a Hozzáadás módszerrel, amelyet ebben az útmutatóban korábban tárgyaltunk, hogy kulcsokat/értékeket adjunk a hashtablehoz. Ebben a példában hozzáadok egy kulcsot, az úgynevezett Név , értékkel Dokumentum .
Itt található a feladat végrehajtásához szükséges parancs.
|_+_|Végül az értékek sikeres hozzáadásának ellenőrzéséhez futtassa a $Emptyhashtable változót:
|_+_|Az utolsó parancs megerősíti az értékek sikeres hozzáadását:
PowerShell Hashtable létrehozása több értékkel és egy kulccsal
Az összes eddigi példában a PowerShell hashtable egy kulcs/érték párral rendelkezik. Vannak azonban olyan helyzetek, amikor szükség lehet egyetlen kulcsra egy több értékkel rendelkező hashtable-ban.
Ebben az esetben ténylegesen egy hashtablet szeretne létrehozni tömbök értékével.
Kezdésként azt hiszem, jobb, ha megmutatom azokat a kódokat, amelyeket a hashtable és a tömb megkülönböztetésére használtam.
|_+_| |_+_|Tehát egyetlen kulccsal és több értékkel rendelkező PowerShell hashtable létrehozásához futtasson egy ehhez hasonló szkriptet:
|_+_|A fenti szkriptben LogName a hashtable kulcs, míg a Rendszer, Alkalmazás és Biztonság értékek hozzá vannak rendelve a kulcshoz. Valójában egyetlen hastable kulcsot hoztunk létre több értékkel.
Az egyes értékek felsorolásához a LogName gombot, futtassa az alábbi parancsot:
|_+_|Az alábbi képernyőkép (1) feliratú része a hashtable eredménye, $hashtableWithArrays . Ezen túlmenően a (2) feliratú rész mutatja az eredményt $hashtableWithArrays.Values parancs.
Ha ismeri a Windows eseménynaplóit – Rendszer, Alkalmazás és Biztonság – ezek a Windows eseménynaplók nevei.
A következő részben megmutatom, hogyan használhatja a PowerShell ForEach ciklust a fenti hashtable iterálásához – és futtassa a Get-EventLog parancsot ezen a 3 eseménynaplón – egyetlen PowerShell-szkript használatával.
A PowerShell Hashtable ismétlése a ForEach Loop segítségével
Az utolsó részben létrehoztam egy egykulcsos PowerShell hashtablet több értékkel.
Az ebben a szakaszban szereplő példában a hashtable-t tároló változót erre módosítottam LogNameKeys . Itt a frissített szkript.
|_+_|Ebben a részben megtanítom, hogyan kell használni Az egyes ben tárolt értékeket végigpörgetni LogName gombot, és futtassa a Get-EventLog parancs.
A PowerShell ForEach gyors felfrissítő tanfolyamához az alábbiakban egy PowerShell ForEach parancs általános szintaxisa olvasható:
|_+_|Ha a fenti szintaxist alkalmazza a mi LogNames hashtable, a frissített parancs így fog kinézni:
A # karakterrel kezdődő sorok PowerShell megjegyzések. |_+_|A szkript első része ugyanaz a szkript, amely létrehozza az egykulcsos PowerShell hashtablet több értékkel. Íme a szkript:
|_+_|A szkript második részében a ($LogNameKeys.Values)-ban tárolt értékeket karakterláncokká konvertáltam, és az eredményt egy másik változóba mentettem, LogNameKeysAsStrings .
|_+_|Végül a szkript harmadik részében bemutatásra kerül a ForEach ciklus:
|_+_|A szkriptnek ebben a részében azt mondjuk a PowerShellnek, hogy vegye fel a fájlban tárolt minden értéket LogName kulcs ( $LogNameKeysAsStrings ) – átmenetileg mentse el az egyedi értéket a változóba LogNameKey – majd használja az időbeli változót a Get-EventLog parancs.
Beépítettem a Legújabb paramétere Get-EventLog parancsot 5 értékkel, így a parancs minden eseménynapló utolsó 5 bejegyzését adja vissza. Ha egy PowerShell-szkriptet néz, bonyolultnak tűnhet. Azonban, ha alaposan megnézzük, általában nagyon egyszerű.Most másolja az alábbi szkriptet egy új PowerShell ISE dokumentumba, és futtassa.
Nyissa meg a PowerShell ISE-t rendszergazdaként. Ha nem nyitja meg a PowerShell ISE-t rendszergazdaként, hozzáférési hibaüzeneteket fog kapni. |_+_|Az alábbi képernyőképen a szkript eredménye látható. Az eredménypanelen 15 sor található – a rendszer, az alkalmazás és a biztonság eseménynaplói közül 5.
Jelentés testreszabása PowerShell Hashtable és Select-Object segítségével
Az utolsó részben létrehoztunk egy PowerShell-szkriptet, amely lekéri a Windows eseménynapló jelentését. Íme egy képernyőkép a jelentésről
A szkript alapértelmezett kimenete 5 oszlopból áll – Index , Idő , EntryType , Forrás , Példányazonosító , és Üzenet . Ha ezt jelentésként küldi el, érdemes lehet ezeket az oszlopneveket könnyen érthető nevekre módosítani.
Íme a forgatókönyv az utolsó részből.
A forgatókönyv kissé módosult. Most van egy változóm, EventLogReport amely elmenti a ForEach ciklus kimenetét. Később elmagyarázom, miért van erre szükség. |_+_|Ha módosítani szeretnénk az oszlopfejléc-neveket ebből a szkriptből, akkor a Get-EventLog parancsot a Select-Object parancs.
Ezután hozzon létre egy PowerShell hashtablet a Select-Object parancs, amely módosítja az oszlopneveket. Itt van a módosított szkript, amely végrehajtja a varázslatot.
|_+_|A forgatókönyv sokkal összetettebbnek tűnik, mint amilyen valójában. Ha azonban a szkriptnek a Select-Object utáni részére összpontosít, könnyen észreveheti a különbséget a szkript és a korábbi példány között.
Konkrétan hashtable-okat is belevettem a Select-Object kód blokkja. Minden hashtable testreszabja a kimenetét Get-EventLog parancs.
Itt van egy minta hashtable a Select-Object Blokk:
|_+_|Szokás szerint a PowerShell hashtable két elemből áll. A kulcs az Név , az érték a Kifejezés .
Egy másik fontos dolog, amit meg kell jegyezni, hogy minden hashtable végén a Select-Object blokk, van egy vessző (,).
Végül itt van a PowerShell végső szkriptjének eredménye:
Korábban megígértem, hogy elmagyarázom, miért mutattam be $EventLogReport változót a ForEach ciklus kimenetének mentéséhez. E változó nélkül a végeredményben 3 egyedi eredmény jelenik meg mind a 3 eseménynaplóhoz. Azonban a teljes eredményeket egy változóban tárolva sikerült ezt a változót a Format-Table-ba átvezetni – ez a teljes eredményt egyetlen táblázatként jeleníti meg. Itt van a parancs, amely végrehajtotta a varázslatot. |_+_|PowerShell Hashtable exportálása CSV-be
Ebben az utolsó részben megtudhatja, hogyan exportálhat PowerShell hashtablet CSV formátumba.
A szakasz első példájában megmutatom, hogyan exportálhatja ezt a hashtabe-t CSV-fájlba.
|_+_|A PowerShell hashtable sikeres CSV-fájlba exportálásához használja a GetEnumerator Módszer (korábban tárgyaltuk) az értékek felsorolására. Ellenkező esetben a tényleges kulcs/érték párok nem kerülnek exportálásra.
Itt van a módosított szkript, amely exportálja a fájlba mentett hashtablet hashtable változót egy CSV-fájlba.
|_+_|Bemutatta az alábbi szkriptet:
|_+_|A forgatókönyv tartalmazza a GetEnumerator Módszer a hashtableban. Ezután a kimenetet a Select-Object parancs.
Végül lecsövezöm a kimenetét Select-Object parancsot a Export-Csv parancs. Ha többet szeretne megtudni a használatról Export-Csv Cmdlet, olvassa el útmutatónkat – Powershell NoTypeInformation: Alkalmazások és példák .
Amikor ezt a szkriptet futtatja, létrehoz egy CSV-fájlt hashtable.csv , az Ön által megadott elérési úton. Tekintse meg az alábbi képernyőképet a CSV-fájl kimenetéhez.
|_+_|
A második példámban az utolsó részben létrehozott szkript kimenetét – az eseménynapló szkriptjét – exportálom egy CSV-fájlba.
Íme a forgatókönyv. A jelentés CSV-fájlba exportálásához hozzáadtam a kódot ez alatt a szkript végén.
|_+_| |_+_|A kód a kimenetét adja ki Az egyes hurok – mentve a EventLogReport változó – a Export-Csv parancs . A létrehozott CSV-fájl az alábbi képernyőképen látható.
Ez az – átfogó útmutató a PowerShell hashtable-ról! Remélem hasznosnak találtad?
Ha hasznosnak találtad, kérlek szavazz Igen a Volt ez a bejegyzés Hasznos kérdés alább.
Alternatív megoldásként feltehet kérdést, megjegyzést írhat, vagy további visszajelzést adhat az oldal végén található Válaszoljon űrlap segítségével.
Végül, további PowerShell tech S zónákért keresse fel a Windows PowerShell útmutató oldalát. A Munka a kezdőlapról oldalunkat is nagyon hasznosnak találhatja.


