Aceasta este o întrebare care mi se pune destul de frecvent, astfel încât m-am gândit să scriu un articol despre asta. După cum sugerează titlul, voi arăta cum puteți adăuga sau elimina elemente într-o matrice PowerShell odată ce a fost creată.
PowerShell Matrice
Să începem cu definirea unei matrice ca vine din PowerShell documentație:
Un tablou este o structură de date care este proiectat pentru a stoca o colecție de elemente., Elementele pot fi de același tip sau de diferite tipuri.Începând cu Windows PowerShell 3.0, o colecție de zero sau un obiect are unele proprietăți ale matricelor.
Crearea unei matrice în PowerShell este foarte simplu și, cel mai probabil, ai făcut-o deja atunci când, de exemplu, obtinerea o listă de utilizatori din Active Directory
$adUsers = Get-AdUser -Filter '*' -Server $adDomainController
Cele de mai sus va returna o serie de AD-obiecte care conțin toți utilizatorii de potrivire filtrul folosit.,
desigur, puteți inițializa un array gol cu următoarea sintaxă:
$myArray = @()# Specify object type$myArray = @()
Cele de mai sus va inițializa un array gol că putem, de exemplu, se umple cu un ANUNȚ de interogare sau adăugarea de elemente statice ca aceasta
$myArray = (1,2,3,4,5)
Cele de mai sus se va adăuga elemente la 1 la 5 pentru a myArray obiect instantierea unui obiect nou cu lungimea de 5
PowerShell Adăuga Elemente la o Serie
Am vedea cum de a crea și atribui valori la o serie dar ce se întâmplă dacă dorim să adăugăm un al șaselea element myArray?, Dacă încercați următoarele
$myArray.Add(6)
va eșua cu următoarea excepție
excepția de mai sus este aruncată ca o matrice PowerShell este o colecție de dimensiuni fixe și eroare spune doar că, nu poate fi extinsă.,
O soluție comună este de a utiliza += operator ca de exemplu
$myArray += 6# Print array's length$myArray.length6
atunci Când se utilizează += operator ce se întâmplă sub capota este
- PowerShell creează o nouă matrice cu aceleași elemente ca și cel vechi, plus noul element
- PowerShell va suprascrie existente matrice cu noul conținut
Toate acest lucru este transparent pentru utilizator, astfel încât nu veți vedea nici o diferență.,
Adăugați Elemente pentru a o Matrice – Introduceți ArrayList
Dacă doriți, pentru a evita toate copierea/mutarea datelor se poate instantia myArray ca un ArrayList care este dinamic și vă va permite să adăugați elimina elementele de pe zbura
în mod Similar, puteți elimina elemente dintr-un ArrayList
# Will corresponding item by index$myArrayList.RemoveAt(1)
Notă: Scoateți metodă va accepta element are valoarea 1 în exemplul de mai sus se referă la valoarea nu elementului de index.,
Exprimate pentru a suprima Adauga metoda de imprimare nouă matrice de lungime
Creare Listă Matrice calea alternativă
exemplul De mai sus se va numi Noul Obiect-metodă pentru a instantia un new ArrayList dar acest lucru este relativ costisitoare în termeni de resurse de calcul astfel încât de mai sus poate fi rescris a ca
$myArray = @()
În plus de a fi mai scurt are avantajul de a evita performanța negativă a lovit din Nou-Obiect și optimizarea de cod este întotdeauna o idee bună, mai ales atunci când se ocupă cu mai mare scripturi.,34f072bc0″>
Note de Închidere
atunci Când scrierea de cod, în ciuda faptului că nu este necesar de PowerShell, încerc să-totdeauna declara de tip obiect ca este util sa stii, la un moment dat, Proprietăți și Metode acceptate de obiect așa că am mereu scrie
$myString = 'Some Text'
mai Degrabă decât
$myString = 'Some Text'
Acest lucru nu este necesar de PowerShell dar cred că ajută codul de lizibilitate și simplifică lucrul cu un obiect declarat 800/900 linii în codul fără a fi nevoie pentru a sări înapoi la variabila declarația.,
Leave a Reply