Ghid final PowerShell Hashtable cu exemple

20 mai 2021 5546 Vizualizări PowerShell Hashtable Ghidul final cu exemple

Un hashtable PowerShell este o colecție de articole și valorile acestora. Elementele sunt denumite chei. Mai mult, fiecare cheie dintr-un tabel hash are o valoare echivalentă.





În esență, un hashtable PowerShell este un „tabel” de stocare cheie/valoare.



În această zonă S, vă voi învăța tot ce trebuie să știți despre hashtablele PowerShell. Prima secțiune explorează diferența dintre un Hashtable și un Array.

Apoi, în a doua secțiune, folosind Obțineți-membru Cmdlet, te voi duce în spatele capotei hashtablelor.



În cele din urmă, voi explora diferite moduri de a folosi hashtables în scripting.



eliminați cortana din bara de activități

Răsfoiți subiectele postărilor

PowerShell Hashtable vs PowerShell Array

PowerShell Hashtable vs PowerShell Array

Înainte de a mă scufunda în Hashtables, vreau să explic diferența dintre Hashtables și Arrays. Această diferențiere este importantă, deoarece cele două concepte pot fi ușor confundate.



În introducerea acestui ghid, am explicat că un hashtable este un magazin cheie/valoare. În plus, un hashtable este ca un tabel cu chei și valori.



Dimpotrivă, un PowerShell Array este o colecție de valori sau obiecte.

Diferența principală dintre un hashtable PowerShell și o matrice PowerShell este că un hashtable este o colecție de elemente (chei) și valorile acestora – în timp ce o matrice este doar o listă de elemente.

Pentru un exemplu rapid, codurile de mai jos sunt exemple de hashtables și o matrice - primul cod creează un hashtables, în timp ce al doilea cod creează o matrice:

|_+_| |_+_| Din exemplele de cod, puteți vedea că, în timp ce o tabelă hash este închisă în {}, o matrice este închisă în ().

Captura de ecran de mai jos afișează rezultatele celor două coduri.

PowerShell Hashtable vs PowerShell Array

Partea capturii de ecran etichetată (1) este rezultatul tabelului hash. Ați văzut perechea cheie/valoare?

În exemplul de mai sus, cheia, Root are valoarea C:UsersvictoDocuments. De asemenea, cheia PSProvider are o valoare numită FileSystem.

În cele din urmă, Nume are valoarea Document.

În plus, partea din captură de ecran etichetată (2) are rezultatul codului matricei. După cum am explicat mai devreme, este doar o listă.

Metode și proprietăți PowerShell Hashtable

Metode și proprietăți PowerShell Hashtable

În introducere, am promis că vă voi duce în spatele capotei PowerShell Hashtables. Asta este!

În această secțiune, vă voi învăța cum să utilizați cmdletul Get-Member pentru a căuta în spatele hashtablelor.

Când trimiteți rezultatul unui PowerShell Hashtable către Obțineți-membru , veți putea revizui cele disponibile Metode și Proprietăți din Hashtable.

Să revenim la primul nostru exemplu hastabil de mai sus:

|_+_|

Copiați codul într-un nou document PowerShell ISE. Apoi, rulați codul.

Apoi, pentru a vedea disponibile Metode și Proprietăți în acest tabel hash, rulați această comandă pe același PowerShell ISE.

|_+_|

Pentru a rula comanda de mai sus, lipiți-o sub ultimul cod. Apoi, evidențiați-l și fie apăsați F8, fie faceți clic pe pictograma evidențiată.

Metode și proprietăți PowerShell Hashtable

Comanda va afișa rezultatele în panoul consolei PowerShell.

Deocamdată, uită-te la rezultat. Are TypeName: System.Collections.Hashtable.

Acest lucru confirmă faptul că obiectele introduse în cmdlet-ul Get-Member sunt un hashtable!

În următoarele sub-secțiuni ale acestei secțiuni, vă voi arăta cum să utilizați metodele și proprietățile comune ale unui hashtable PowerShell.

Cum să adăugați sau să eliminați elemente din tabelul hash existent

În această secțiune, veți învăța să adăugați elemente noi la un hashtable PowerShell existent. Mai mult, veți învăța și cum să eliminați un articol dintr-o tabelă hash PowerShell existentă.

Înainte de a mă scufunda în el, vreau să menționez că puteți crea și un hashtable gol. Apoi, adăugați chei/valori la tabelul hash - mai multe despre asta mai târziu.

Înapoi la adăugarea sau eliminarea elementelor la hastabilele PowerShell existente – când am rulat $hashtable | Obțineți-membru comanda, una dintre metodele afișate în rezultat este Adăuga . Există și o metodă, Elimina .

Vedeți mai jos porțiunile evidențiate ale capturii de ecran:

Metode și proprietăți PowerShell Hashtable

Înainte de a vă arăta cum să utilizați aceste două metode, să ne uităm la codul hashtable original PowerShell:

|_+_|

Tabelul hash are 3 intrări. În acest exemplu, voi adăuga o altă cheie numită Description cu valoarea Maps în folderul meu „Documentele mele”.

Pentru a finaliza această sarcină, voi rula comanda de mai jos (pe aceeași consolă PowerShell ISE pe care am rulat comenzile anterioare)

|_+_| Observați cum am folosit Add Metodă . Adaug un punct (.) lângă variabila care deține tabelul hash. Apoi, am inclus metoda, Adăuga , urmată de (). În cele din urmă, am inclus noua pereche cheie/valoare pe care vreau să o adaug la tabelul hash.

După ce executați comanda, pentru a confirma că a fost adăugată cheia suplimentară, evidențiați $hashtable și apăsați F8.

|_+_|

Iată o captură de ecran a rezultatului – confirmând faptul că noua cheie/valoare a fost adăugată.

Mergând mai departe, puteți folosi aceeași abordare pentru a elimina o valoare dintr-o tabelă hash PowerShell.

Pentru a elimina ultima cheie pe care am adăugat-o în tabelul hash, executați o comandă similară cu ultima comandă. De data aceasta însă înlocuiți Adăuga Metoda cu Elimina Metodă.

Iată comanda:

|_+_| The Elimina Metoda include doar cheie . Nu trebuie să includeți cheia valoare în comandă.

Mai întâi, executați comanda de mai sus. Apoi, pentru a confirma că cheia a fost scoasă, evidențiați $hashtable și apăsați F8.

|_+_|

Rezultatul comenzii confirmă că cheia a fost scoasă!

Metode și proprietăți PowerShell Hashtable - Cum să adăugați sau să eliminați elemente la Hashtable existent

Cum să verificați dacă un hashtable PowerShell conține o cheie

Când am transmis hastatable-ul de mai jos la Obțineți-membru Cmdlet, una dintre metodele afișate este Conține cheia Metodă – vezi captura de ecran de mai jos.

|_+_|

The Conține cheia Metoda poate fi folosită în atât de multe moduri. Cu toate acestea, una dintre aplicațiile obișnuite ale acestei metode este să o folosești pentru a verifica dacă o cheie există într-o tabelă hash și dacă nu există, adăugați cheia.

O altă aplicație a Conține cheia Metoda unui hashtable PowerShell este pur și simplu să îl utilizați pentru a verifica dacă un nume de cheie există în hashtable.

Pentru a verifica dacă o cheie există într-o tabelă hash PowerShell folosind Conține cheia Metodă, rulați comanda de mai jos:

|_+_|

Această comandă verifică dacă o cheie cu numele Descriere există în tabelul hash salvat în variabila $hashtable. Rezultatul comenzii afișează False.

Metode și proprietăți pentru PowerShell Hashtable - Cum să verificați dacă un PowerShell Hashtable conține o cheie

Pentru a verifica dacă cheia Description există înainte de a o adăuga la tabelul hash PowerShell, vom avea nevoie de o linie suplimentară de coduri la comanda anterioară.

Iată codul îmbunătățit.

|_+_|

Codul folosește instrucțiunea condiționată IF pentru a verifica dacă o cheie cu numele Descriere există în tabelul hash.

Apoi, dacă rezultatul este Fals, în partea de execuție a comenzii a instrucțiunii IF, folosim Adăuga Metoda tabelului hash PowerShell pentru a adăuga cheia la tabelul hash.

Totuși, dacă cheia există în tabelul hash, în partea Else a instrucțiunii IF, afișăm un mesaj care informează persoana care a executat comanda că cheia există deja.

După ce rulați ultima comandă, evidențiați $hashtable variabilă și rulați-l singur. Rezultatul confirmă că cheia Descriere a fost adăugată la variabilă deoarece nu a existat.

Pentru a testa dacă acest script funcționează - rulați-l din nou...

|_+_|

De data aceasta, scenariul nu a adăugat cheia. Mai degrabă, a returnat informațiile din partea Else a declarației IF - Cheia există deja în tabelul hash .

Metode și proprietăți pentru PowerShell Hashtable - Cum să verificați dacă un PowerShell Hashtable conține o cheie

Cum să convertiți un hashtable PowerShell în șir

Primul pas pentru a converti un PowerShell Hashtable într-un șir este de a returna valorile cheilor din hashtable. Cu alte cuvinte, convertiți tabela hashtable PowerShell într-o matrice PowerShell.

Pentru a returna valorile într-un tabel hash, apelați Valori proprietatea hashtable-ului.

pluginuri pentru plex media server

Iată comanda care returnează valorile într-un tabel hash:

|_+_|

Odată ce ați returnat valorile într-un hashtable PowerShell, următorul pas este să trimiteți $hashtable.Values ​​către Out-String Comanda…

|_+_| Mai târziu în acest ghid, veți aprecia importanța conversiei unui hashtable PowerShell într-un șir. Pentru a vedea aplicarea practică a acestui lucru într-un script SysAdmin din lumea reală, citiți mai departe.

Cum să utilizați PowerShell Hashtable GetEnumerator Metodă

O altă metodă importantă a unui hashtable PowerShell este GetEnumerator Metodă.

Puteți folosi această metodă pentru a separa cheile dintr-un tabel hash în șiruri individuale. Iată un exemplu de comandă a GetEnumerator Metoda unui hashtable:

|_+_|

După cum puteți vedea din rezultatul comenzii de mai sus, cheile și valorile sunt returnate în anteturi individuale. Nu mă pot gândi la o aplicație acum, totuși, dacă trebuie vreodată să spargeți cheile într-un hashtable PowerShell, știți cum să o faceți!

Cum să numărați elementele din tabelul hash din PowerShell

Există încă o altă proprietate hashtable utilă, Numara . După cum sugerează și numele, această proprietate returnează numărul de chei dintr-o tabelă hash.

Ca Valori Proprietate, pentru a apela proprietatea Count, utilizați o comandă similară celei de mai jos:

|_+_|

Comanda confirmă că hashtable, $hashtable are 4 chei.

Cum să numărați elementele din tabelul hash din PowerShell

Cum să creați un hashtable PowerShell gol și să adăugați chei

Cum să creați un hashtable PowerShell gol și să adăugați chei

Până acum, toate exemplele din această zonă S s-au concentrat pe manipularea tabelului hashtable PowerShell cu cheile existente. În această secțiune, veți învăța cum să creați un hashtable gol.

Apoi, adăugați chei la tabelul hash.

Pentru a crea un hashtable PowerShell gol, introduceți pur și simplu @ semn, urmat de {} paranteze. Iată un exemplu de hashtable gol salvat într-o variabilă, Emptyhashtable :

|_+_|

Pentru a confirma că tabelul hash este creat fără valori, rulați comanda anterioară. Apoi, rulați variabila pe cont propriu.

|_+_|

Următorul pas este să utilizați Adăuga metoda, tratată mai devreme în acest ghid, pentru a adăuga chei/valori la tabelul hash. În acest exemplu, voi adăuga o cheie, numită Nume , cu o valoare de Document .

Iată comanda pentru a efectua această sarcină.

|_+_|

În cele din urmă, pentru a confirma că valorile au fost adăugate cu succes, rulați variabila, $Emptyhashtable:

|_+_|

Ultima comandă confirmă că valorile au fost adăugate cu succes:

Cum se creează tabelul hash PowerShell cu mai multe valori și o singură cheie

Cum se creează tabelul hash PowerShell cu mai multe valori și o singură cheie

În toate exemplele pe care le-am acoperit până acum, tabelul hash PowerShell are o pereche cheie/valoare. Cu toate acestea, există circumstanțe în care poate fi necesar să aveți o singură cheie într-un tabel hash cu mai multe valori.

În acest caz, doriți efectiv să creați un hashtable cu matrice ca valori.

Pentru început, cred că este mai bine să vă arăt codurile pe care le-am folosit pentru a diferenția un hashtable de o matrice.

|_+_| |_+_|

Deci, pentru a crea un hashtable PowerShell cu chei unice și mai multe valori, rulați un script similar cu acesta:

|_+_|

În scenariul de mai sus, LogName este cheia hashtable, în timp ce valorile System, Application și Security sunt alocate cheii. În mod efectiv, am creat o singură cheie hastabil cu mai multe valori.

Pentru a enumera valorile individuale în LogName cheie, executați comanda de mai jos:

|_+_|

Partea din captura de ecran de mai jos etichetată (1) este rezultatul tabelului hash, $hashtableWithArrays . Mai mult, porțiunea etichetată (2) arată rezultatul $hashtableWithArrays.Values comanda.

Dacă sunteți familiarizat cu jurnalele de evenimente Windows – sistem, aplicație și securitate – sunt nume ale jurnalelor de evenimente Windows.

În secțiunea următoare, vă voi arăta cum să utilizați bucla PowerShell ForEach pentru a itera prin tabelul hash de mai sus - și a rula Get-EventLog comandă pe aceste 3 jurnale de evenimente – folosind un singur script PowerShell.

Cum se repetă tabelul de hash PowerShell cu bucla ForEach

Cum să repetați PowerShell Hashtable cu ForEach

În ultima secțiune, am creat un hashtable PowerShell cu o singură cheie cu mai multe valori.

Pentru exemplul din această secțiune, am schimbat variabila în care a stocat tabelul hash LogNameKeys . Iată scriptul actualizat.

eroare netflix u7353-5101
|_+_|

În această secțiune, vă voi învăța cum să utilizați Pentru fiecare pentru a parcurge în buclă valorile stocate în LogName tasta și rulați Get-EventLog comanda.

Pentru un curs rapid de reîmprospătare pe PowerShell ForEach, mai jos este sintaxa generală a unei comenzi PowerShell ForEach:

|_+_|

Dacă aplicați sintaxa de mai sus la nostru LogNames hashtable, comanda actualizată va arăta astfel:

Rândurile care încep cu # sunt comentarii PowerShell . |_+_|

Prima parte a scriptului este același script care creează tabelul hash PowerShell cu o singură cheie cu mai multe valori. Iată scenariul:

|_+_|

În a doua parte a scriptului, am convertit valorile stocate în ($LogNameKeys.Values) în șiruri și am salvat rezultatul într-o altă variabilă, LogNameKeysAsStrings .

|_+_|

În cele din urmă, în a treia parte a scriptului – este introdusă bucla ForEach:

|_+_|

În această parte a scriptului, îi spunem lui PowerShell să ia fiecare valoare stocată în LogName cheie ( $LogNameKeysAsStrings ) – salvați acea valoare individuală temporar în variabilă LogNameKey – apoi, utilizați variabila temporală pentru a rula Get-EventLog comanda.

Am inclus Cel mai nou parametrul Get-EventLog comanda cu o valoare de 5, astfel încât comanda să returneze ultimele 5 intrări ale fiecărui jurnal de evenimente. Când te uiți la un script PowerShell, poate părea complicat. Cu toate acestea, dacă te uiți cu atenție, de obicei este foarte ușor.

Acum, copiați scriptul de mai jos într-un nou document PowerShell ISE și rulați-l.

Deschideți PowerShell ISE ca administrator. Dacă nu deschideți PowerShell ISE ca administrator, veți primi mesaje de eroare de acces. |_+_|

Captura de ecran de mai jos a afișat rezultatul scriptului. Există 15 rânduri în panoul de rezultate – reprezentând 5 din jurnalele de evenimente System, Application, Security.

Cum să personalizați un raport cu PowerShell Hashtable și Select-Object

Cum să personalizați un raport cu PowerShell Hashtable și Select-Object

În ultima secțiune, am creat un script PowerShell care extrage raportul jurnal de evenimente Windows. Iată o captură de ecran a raportului

Ieșirea implicită a scriptului are 5 coloane – Index , Timp , EntryType , Sursă , ID instanță , și Mesaj . Dacă trimiteți acest raport ca raport, poate doriți să schimbați aceste nume de coloane cu nume care vor fi ușor de înțeles.

Iată scenariul din ultima secțiune.

Scriptul a fost ușor modificat. Acum am o variabilă, EventLogReport care salvează rezultatul buclei ForEach. Voi explica de ce este necesar acest lucru mai târziu. |_+_|

Pentru a modifica numele antetului coloanei din acest script, vom canaliza Get-EventLog comanda către a Selectare-Obiect comanda.

Apoi, creați un hashtable PowerShell în Selectare-Obiect comandă care modifică numele coloanelor. Iată scriptul modificat care realizează magia.

|_+_|

Scenariul pare mult mai complex decât este în realitate. Cu toate acestea, dacă vă concentrați pe partea din script după Select-Object, va fi ușor să observați diferența dintre acest script și copia anterioară.

Mai exact, am inclus hashtables în Selectare-Obiect bloc al codului. Fiecare tabel hash personalizează rezultatul Get-EventLog comanda.

Iată un exemplu de hashtable din Selectare-Obiect bloc:

|_+_|

Ca de obicei, tabela hashtable PowerShell are două elemente. Cheia este Nume , valoarea este Expresie .

Un alt lucru important de reținut este că la sfârșitul fiecărei tabele hash din fișierul Selectare-Obiect bloc, există o virgulă (,).

În cele din urmă, iată rezultatul scriptului final în PowerShell:

conținutul descărcabil cu abur nu este instalat
Mai devreme am promis să explic de ce m-am prezentat $EventLogReport variabilă pentru a salva rezultatul buclei ForEach. Fără această variabilă, rezultatul final va afișa 3 rezultate individuale pentru fiecare dintre cele 3 jurnale de evenimente. Cu toate acestea, prin stocarea tuturor rezultatelor într-o variabilă, am reușit să transfer această variabilă în Format-Table - aceasta afișează întregul rezultat ca un singur tabel. Iată comanda care a efectuat magia. |_+_|

Cum să exportați PowerShell Hashtable în CSV

Cum să exportați PowerShell Hashtable în CSV

În această secțiune finală, veți învăța cum să exportați un hashtable PowerShell în CSV.

În primul meu exemplu pentru această secțiune, vă voi arăta cum să exportați acest hashtabe în CSV.

|_+_|

Pentru a exporta cu succes acest hashtable PowerShell într-un fișier CSV, trebuie să utilizați GetEnumerator Metoda (discutată mai devreme) de a enumera valorile. În caz contrar, perechile cheie/valoare reale nu vor fi exportate.

Iată scriptul modificat care exportă tabelul hash salvat în hashtable variabilă într-un fișier CSV.

|_+_|

În introdus scriptul de mai jos:

|_+_|

Scriptul include GetEnumerator Metodă în hashtable. Apoi conducte de ieșire la Selectare-Obiect comanda.

În cele din urmă, țin ieșirea Selectare-Obiect comanda către Export-Csv comanda. Pentru a citi mai multe despre cum se utilizează Export-Csv Cmdlet, citiți ghidul nostru – Powershell NoTypeInformation: Aplicații și exemple .

Când rulați acest script, acesta creează un fișier CSV numit hashtable.csv , în calea specificată de dvs. Vedeți captura de ecran de mai jos pentru ieșirea fișierului CSV.

|_+_|

În al doilea exemplu, voi exporta rezultatul scriptului pe care l-am creat în ultima secțiune – scriptul de jurnal de evenimente – într-un fișier CSV.

Aici este scenariul. Pentru a exporta raportul în CSV, am adăugat codul sub acesta la sfârșitul acestui script.

|_+_| |_+_|

Codul canalizează ieșirea Pentru fiecare buclă – salvată în EventLogReport variabilă – la Comanda Export-Csv . Fișierul CSV generat este afișat în captura de ecran de mai jos.

Asta este - un ghid cuprinzător despre hashtable PowerShell! Sper că ați găsit de ajutor?

Dacă vi s-a părut util, vă rugăm să votați da la întrebarea A fost utilă această postare de mai jos.

Alternativ, puteți pune o întrebare, lăsa un comentariu sau oferi mai multe feedback cu ajutorul formularului Lăsați un răspuns aflat la sfârșitul acestei pagini.

În cele din urmă, pentru mai multe zone PowerShell tech S, vizitați pagina noastră de ghid pentru Windows PowerShell. De asemenea, s-ar putea să găsească foarte utilă pagina noastră de lucru de acasă.

Referințe și lecturi suplimentare

  1. Tot ce ai vrut să știi despre hashtables
  2. Combinați matrice și tabele Hash în PowerShell pentru distracție și profit
  3. Despre Hash Tables