PowerShell Array Guide: Cum să utilizați și să creați
matricele sunt o caracteristică fundamentală a PowerShell. Matricile fac posibilă ingerarea, manipularea și ieșirea structurilor de date adevărate (și nu doar șiruri brute). Această capacitate face PowerShell diferit și mai util decât alte limbaje de scripting.în acest articol, vom explica ce sunt matricele și cum să le folosim în PowerShell. Vă vom arăta mai întâi cum să creați tablouri în PowerShell și apoi cum să utilizați funcțiile de bază pentru a le manipula., Apoi ne vom uita la mai multe tipuri diferite de matrice, și de a explora unele dintre caracteristicile mai subtile ale acestora.
Obțineți Cursul video gratuit PowerShell și Active Directory Essentials
- Array Fundamentele
- Tablouri de Obiecte
- Operatori De Rețele
- Cum de a Adăuga Valori pentru a o Matrice
- Array Tipuri
- Avansat Matrice de Funcții
PowerShell Matrice
Matrice sunt o trăsătură comună a aproape toate limbajele de programare. Ele sunt o structură de date care servește ca o colecție de mai multe bucăți de date. Când lucrați cu o matrice, puteți utiliza aceeași comandă pentru a efectua aceeași funcție pe fiecare element dintr-o matrice sau puteți accesa și manipula elemente individuale folosind un index.,tablourile din PowerShell pot conține unul sau mai multe elemente. Un element poate fi un șir, un număr întreg, un obiect sau chiar o altă matrice și o matrice poate conține orice combinație a acestor elemente. Fiecare dintre aceste elemente are un index, care începe întotdeauna (uneori confuz) la 0. Deci, primul element dintr-o matrice este dat indicele 0, Al doilea este indexat ca 1 și așa mai departe.,tablourile PowerShell sunt o parte fundamentală a PowerShell, care apar în fiecare tutorial PowerShell acolo, și o bună cunoaștere a modului de a lucra cu ei este critică pentru multe aspecte ale utilizării PowerShell, de la configurarea Office 365 la utilizarea PowerShell pentru Pentesting.
un exemplu de matrice PowerShell
cel mai simplu mod de a ilustra ce este o matrice pentru a lua un exemplu. Să facem o matrice care reprezintă un castron de fructe.,există mai multe moduri de a crea tablouri în Powershell, dar cel mai simplu este să executați această comandă:
@()
aceasta va crea o matrice goală. Cu toate acestea, o matrice goală Nu este atât de utilă, așa că haideți să adăugăm câteva fructe la noua noastră matrice. Acestea vor fi reprezentate ca șiruri de text. Pentru a face acest lucru, executați această comandă
$fruit = @('Apples','Oranges','Bananas')
aceasta va numi o matrice „fruit” și va adăuga trei elemente la ea., Pentru a vedea că acest lucru a funcționat, puteți citi matrice folosind această comandă:
PS /Users/yourname> $fruit
Care se va întoarce acum:
Apples Oranges Bananas
după Cum puteți vedea, această matrice este un grup de piese individuale de date. PowerShell le va indexa automat în modul în care am explicat mai sus: „Apple” va fi indexat ca 0, „portocale” ca 1 și „banane” ca 2.
acest exemplu ar putea face să pară că array-urile sunt obiecte destul de simple și într-un fel sunt. Simplitatea lor, cu toate acestea, este, de asemenea, ceea ce le face astfel de obiecte flexibile, puternice., În restul acestui ghid, vă vom oferi un gust de ceea ce se poate face cu matrice.în această secțiune, vom analiza cele mai de bază modalități de a crea și de a lucra cu matrice în PowerShell.
creați o matrice
Mai întâi, vom crea o matrice. Modul standard de a face acest lucru este de a utiliza @(), deși există și alte modalități.pentru moment, să creăm o matrice numită „date”. Pentru a face acest lucru, executați:
$data = @()
această matrice este goală în acest moment, deoarece nu am specificat date pentru aceasta., Pentru a verifica câte elemente sunt într-o matrice, putem folosi funcția count:
$data.count
care, în acest moment, va returna un 0, deoarece nu există elemente în matricea noastră. Pentru a face o serie cu unele date în ea, am pus aceste date în paranteze după @:
$data = @('Zero','One','Two','Three')
Run același funcția count acum, și veți vedea că există 4 itemi în această matrice. Pentru a vedea din nou aceste elemente, invocăm doar matricea:
$data
care va lista elementele pe care le punem în matrice.,
accesarea elementelor
acum avem o matrice, vom dori să accesăm elemente din ea. Există mai multe modalități de a face acest lucru. Primul este de a utiliza indexul elementelor din matrice. Așa cum am spus mai devreme, indexurile încep de la 0, așa că pentru a prelua primul element din matricea noastră, va trebui să-i spunem lui PowerShell să privească Elementul al cărui indice este zero. Facem asta rulând:
$data
Acest lucru va returna” zero”, deoarece acesta a fost primul șir pe care l-am pus în matricea noastră.,
putem extinde, de asemenea, această sintaxă pentru a returna mai multe elemente din același tablou, doar punând mai mulți indexuri în aceeași comandă. De exemplu, executați:
$data
Acest lucru va reveni „Zero doi trei”. Elementele sunt returnate în aceeași ordine în care ați introdus indexurile. De asemenea, puteți utiliza sintaxa suplimentară pentru a returna seturi de elemente dintr-o matrice. De exemplu:
$data
va returna toate elementele cu un index între 1 și 3 (inclusiv)., Și:
$data
va returna ultimul element din matrice: numărul negativ spune PowerShell să numere înapoi de la sfârșitul matricei, deci în acest caz, această comandă va returna „trei”, ultimul element din matricea noastră de testare.
schimbarea elementelor
aceeași metodă poate fi utilizată pentru a actualiza elementele dintr-o matrice. De exemplu, pentru a actualiza Elementul al cărui index este 2 (amintiți-vă că acesta este al treilea element din matrice), putem rula:
$data = 'second'
Acest lucru ne oferă acces direct la elementele din interiorul unei matrice.,una dintre cele mai puternice caracteristici ale PowerShell (și, de fapt, a oricărei interfețe de linie de comandă) este capacitatea de a efectua aceeași acțiune pe toate elementele dintr-o matrice. Există o serie de moduri diferite de a face acest lucru.cel mai de bază este de a utiliza o conductă, care este caracterul |. Când treceți o matrice într-o conductă, fiecare element dintr-o matrice este procesat individual. Așa cum am subliniat în articolul nostru despre obiectele PowerShell și conductele de date, acesta este adesea cel mai simplu mod de a efectua acțiuni iterate.,de exemplu, pentru a adăuga o descriere fiecărui element din matricea noastră, putem folosi această comandă:
$data | ForEach-Object {"Item: "}
această comandă spune PowerShell să ia elementele în $data pe rând, apoi pentru fiecare dintre ele adăugați „Item:” la început, urmată de valoarea inițială.există mai multe alte modalități de a efectua acțiuni iterate în PowerShell, dintre care multe vor fi familiare dacă ați folosit alte limbaje de programare: PowerShell include bucle ForEach, pentru bucle și bucle de comutare. Pentru mai multe detalii despre acestea, verificați documentația Microsoft.,
tablouri de obiecte
până acum, am lucrat cu o matrice care conține date de bază: un șir. Cu toate acestea, Matricele pot conține și obiecte, iar multe dintre cele mai frecvente utilizări ale PowerShell – cum ar fi configurarea Office 365 – necesită să știți cum să lucrați cu obiecte. Deci, să ne uităm la câteva comenzi de bază pentru a face asta.
crearea unui tablou de obiecte
putem crea un tablou de obiecte în același mod în care am făcut-o cu șiruri de caractere, folosind funcția @ ()., De exemplu, pentru a face o listă de testare a angajaților, putem folosi:
majoritatea cmdleturilor vor returna o matrice de acest tip atunci când le atribuiți o variabilă cu care să lucreze.
accesarea obiectelor din tablouri
procesul prin care am trecut mai sus pentru a accesa bucăți individuale de date poate fi utilizat în mod egal cu tablouri care conțin obiecte., De exemplu, de funcționare:
$data
Va reveni:
FirstName LastName ----- ---- Kevin Marquette
în mod Alternativ, putem accesa proprietățile obiectelor individuale prin specificarea proprietate care ne-am dori în aceeași comandă, astfel:
$data.FirstName
Care va reveni „Kevin”.
actualizarea proprietăților obiectelor în matrice
Mergând mai departe, aceeași sintaxă ne oferă capacitatea de a actualiza proprietățile individuale din obiectele care sunt ținute în matrice., De exemplu:
$data.FirstName = 'Jay'
va actualiza proprietatea FirstName din primul element din matricea noastră la”Jay”.
accesarea fiecărei proprietăți dintr-o matrice de obiecte
în majoritatea limbajelor de programare, ar trebui să folosim un proces iterativ (vezi mai sus) pentru a accesa toate proprietățile dintr-o serie de obiecte. Putem face asta în PowerShell, precum și, desigur, de funcționare:
$data | ForEach-Object {$_.LastName}
Acesta va returna o listă de Nume proprietăți în gama noastră, dar este de calcul costisitoare și dificil de a scrie de fiecare dată când doriți să vedeți aceste date., Deci, în schimb, PowerShell are o scurtătură. Rulați acest lucru:
$data.LastName
și veți vedea aceeași listă. PowerShell ia fiecare obiect pe rând, la fel ca înainte, dar ascunde această complexitate de noi.
operatori pentru matrice
aproape toți operatorii pe care îi folosim pentru elementele de date individuale din PowerShell vor funcționa și cu matrice, dar unele dintre ele funcționează puțin diferit atunci când sunt utilizate în acest mod. Deci, să aruncăm o privire la cei mai comuni operatori și cum le puteți folosi în matrice.,
– join
operatorul-join este una dintre cele mai utilizate comenzi din PowerShell și este extrem de util atunci când lucrați cu matrice. Acesta poate fi folosit iterativ pe elementele dintr-un tablou pentru a le uni împreună în ieșirea unui tablou.
să luăm un exemplu. În primul rând, de a crea o gamă de simplu:
$data = @(1,2,3,4)
Și apoi utilizați -alăturați-vă să introduceți o cratimă între fiecare element, și de ieșire rezultatul:
$data -join '-'
Care va reveni „1-2-3-4”., Operatorul-join poate fi, de asemenea, utilizat fără un delimitator, în care elementele dintr-o matrice vor fi afișate ca o serie de valori neseparate.
-conține
– conține operatorul funcționează pe matrice într-un mod foarte similar cu utilizarea sa cu puncte de date unice. Puteți să-l utilizați pentru a verifica dacă un tablou conține un anumit șir și va afișa o valoare booleană. De exemplu:
PS> $data = @('red','green','blue') PS> $data -contains 'green' True
egalități
există doi operatori pentru verificarea egalității în PowerShell: -eq și-ne., Dacă sunteți obișnuiți să le utilizați pe valori unice, totuși, modul în care acestea funcționează în raport cu matricele poate părea puțin ciudat. Dacă utilizați -eq, de exemplu, operatorul nu va emite un „adevărat” Boolean, ci va returna obiectul care se potrivește.
de exemplu:
PS> $data = @('red','green','blue') PS> $data -eq 'green' green
operatorul-ne funcționează în același mod, cu excepția faptului că vă va oferi toate valorile care nu sunt egale cu valoarea specificată., Deci:
PS> $data = @('red','green','blue') PS> $data -ne 'green' red blue
cu toate acestea, puteți utiliza o declarație if() pentru a compara ieșirea acestor operatori cu ieșirea așteptată și pentru a returna o ieșire „adevărată” sau „falsă”.
cum se adaugă valori într-o matrice
după toate instrucțiunile de mai sus, probabil vă întrebați De ce am lăsat afară adăugarea de elemente de date într-o matrice. Asta pentru că nu există nici o modalitate de a face asta. O matrice, odată creată, rămâne aceeași dimensiune pentru totdeauna, și astfel, în scopul de a face mai mare trebuie să-l copiați într-o nouă matrice, și ștergeți originalul.,
sună complicat, dar Powershell se ocupă de acest proces pentru dvs. folosind o serie de operatori destul de simpli. Există două modalități principale de a face acest lucru.PowerShell poate adăuga două tablouri împreună folosind operatorul”+”, care ascunde complexitatea a ceea ce face de fapt sistemul. De exemplu, dacă faci două matrice astfel:
$first = @( 'Zero' 'One' ) $second = @( 'Two' 'Three' )
puteți apoi adăugați-le împreună, folosind doar:
PS> $first + $second
Acest lucru va face o nouă matrice cu toate cele patru valori, și de ieșire a rezultatelor., Rețineți, totuși, că nu va da acestui nou tablou un nume nou. Pentru a face acest lucru, folosim operatorul+=.
Plus Egal pentru Combinarea Matrice
în Loc de a folosi „+” operator în exemplul de mai sus, ne-ar fi folosit „+=” operator, care ne va oferi o gamă cu totul nouă:
$first += 'Two, Three'
comanda pare simplu, dar este ascuns ce PowerShell este de fapt o fac aici. Copiază toate valorile de la $first și creează o nouă matrice care include valorile suplimentare. Apoi șterge matricea originală.,acest lucru este oarecum problematic, deoarece este costisitor din punct de vedere computațional. Cu matrice mici, s-ar putea să nu observați, dar cu cantități mari de date, această metodă vă poate bloca rapid sistemul. De aceea v-am oferit o cale în jurul acestei probleme, mai jos.
tipuri de matrice
până în prezent, am avut de-a face cu matrice implicite în PowerShell. Deși PowerShell nu ne-a spus la momentul respectiv, fiecare matrice pe care am creat-o până acum este de un singur tip, tipul]. Acest tip de matrice poate deține orice tip de valoare de date.,
matrice puternic tastate
cu toate acestea, există momente când doriți să restricționați tipurile de date sau obiecte pe care o matrice le poate păstra doar la una. Putem face acest lucru folosind o matrice puternic tastată, care poate conține doar tipul de date specificat.
de exemplu, pentru a face o matrice care poate lua doar numere întregi, putem folosi:
PS> ] $numbers = 1,2,3
Dacă încercați să puneți tipul greșit de valoare de date într-o matrice puternic tastată, va returna un cod de eroare.
ArrayList
așa cum am spus mai sus, adăugarea de elemente la matrice poate fi un hassle., Cu toate acestea, există un alt tip de colecție – ArrayList – care se ocupă de acest lucru mai elegant. Cu toate acestea, pentru a utiliza acest tip de colecție, va trebui să invocăm.Net framework, care poate arunca câteva rezultate nefericite în calea noastră.pentru a crea un ArrayList, apoi adăugați elemente la acesta, executați următoarele:
$myarray = ::new() $myArray.Add('Value')
aici, putem folosi constructorul.Net implicit pentru a crea un nou ArrayList, apoi folosind operatorul-Add pentru a adăuga elemente la acesta. Operatorul este acolo pentru că uneori aceste comenzi aruncă ieșiri ciudate care pot încurca codul.,
Mergând mai departe
acestea sunt cele mai comune tipuri de matrice în PowerShell, dar există și alte câteva. Dacă vă dezvoltați ca utilizator PowerShell, este util să începeți să utilizați ArrayLists în loc de matrice drepte, dar ar trebui să știți, de asemenea, că acest tip de matrice nu este utilizat de utilizatorii avansați.
în schimb, cei mai experimentați programatori vor folosi un tip de listă generic numit listă. Acest tip de listă este puțin mai complex de utilizat, deoarece este derivat direct din C#, dar odată ce l-ați stăpânit, oferă mult mai multă flexibilitate decât matricele pe care le-am discutat până acum.,
Avansat Matrice de Funcții
În plus față de funcționalitatea de bază ne-am acoperit până acum, există, de asemenea, o serie de mai avansată gamă de funcții, și unele caracteristici suplimentare pentru a nota, pe măsură ce începe să le utilizați mai frecvent.
matricele pre-dimensionate
modul standard de creare a matricelor de mai sus va crea o matrice cu o dimensiune determinată de numărul de elemente din ea. Cu toate acestea, puteți crea o matrice de o dimensiune specificată utilizând noul constructor($size).
puteți face acest lucru astfel:
$data = ]::new(4)
Dacă executați o .,numărați interogarea pe această matrice, va returna „4”, deoarece, deși nu are date în ea, va umple spațiul cu 0. Acest lucru este de fapt extrem de util dacă trebuie să inițializați o nouă matrice care este umplută cu zerouri, deoarece o matrice pre-dimensionată va fi inițial umplută cu 0.
înmulțirea matricelor
înmulțirea obiectelor într – o matrice – și mai ales șirurile-este ceva care confundă majoritatea oamenilor atunci când trebuie să o facă pentru prima dată., Am văzut scripturi if() extrem de complicate pentru a obține acest rezultat, dar există un mod mult mai simplu:
PS> $data = @('red','green','blue') PS> $data * 3
da, așa este. Aceasta va crea o nouă matrice cu fiecare valoare repetată de trei ori. Puteți utiliza, de asemenea, această comandă ca o modalitate alternativă de a umple o matrice cu zerouri (sau orice altă valoare implicită), făcând o matrice cu valoarea aleasă și apoi înmulțind-o de câte ori doriți.
matrice imbricate
ca multe alte limbaje de programare, PowerShell acceptă matrice imbricate., Modul standard de a face acest lucru în PowerShell este de a utiliza o matrice multidimensională. Cel mai simplu exemplu este crearea unei matrice bidimensionale:
$data = @(@(1,2,3),@(4,5,6),@(7,8,9)) $data2 = @( @(1,2,3), @(4,5,6), @(7,8,9) )
structura de date pe care o faceți cu această comandă este o matrice clasică și poate fi lucrată ca și în alte limbaje de programare. De exemplu, pentru a accesa o anumită valoare din această matrice, va trebui să specificați două dimensiuni.,
de exemplu, pentru a accesa valoarea „3”, am folosi aceasta:
PS> $outside = 0 PS> $inside = 2 PS> $data 3
această comandă poate fi apoi utilizată pentru a accesa orice valoare, dar trebuie să adăugați paranteze imbricate pentru a intra în fiecare nivel al matricei.
un cuvânt Final
toate instrucțiunile de mai sus ar putea fi o mulțime pentru utilizatorii care vin pentru prima dată la PowerShell, dar au fost alese cu grijă ca o modalitate de a învăța limba. Prin combinarea diferitelor tehnici, puteți construi scripturi puternice pentru a automatiza multe dintre cele mai frecvente – și cele mai consumatoare de timp – munca pe care o faceți cu PowerShell.,aceste abilități vă vor ajuta, de asemenea, să depășiți PowerShell. Multe dintre cele mai comune limbi utilizate pentru gestionarea securității cibernetice, cum ar fi NetCat și Nmap, folosesc multe dintre aceleași principii pe care le face PowerShell. Prin urmare, utilizarea PowerShell pentru a vă îmbunătăți securitatea cibernetică este o modalitate excelentă de a învăța cum să vă asigurați sistemele în general.