gyakran a PowerShell szkriptek írásakor szüksége van egy módra egy elemkészlet tárolására. Ennek egyik gyakori módja az ArrayList néven ismert tömb vagy konkrét típus. De mi a tömb egyébként? A tömb olyan adatstruktúra, amelyet elemek gyűjteményének tárolására terveztek. Ez magában foglalhatja mind az azonos, mind a különböző típusú elemeket.

a tömböket számos különböző programozási nyelven használják, a PowerShell pedig nem különbözik egymástól. Számos módja van, hogy hozzon létre, manipulálni, optimalizálja tömbök., Ebben a cikkben megtudhatja ArrayLists, tömbök, gyűjtemények, valamint néhány legjobb gyakorlatok alkalmazása során őket PowerShell.

Tartalomjegyzék

előfeltételek / követelmények

mivel csak a PowerShell nyelvvel fog dolgozni, nincsenek környezeti előfeltételek. Csak egy Windows PC-re van szüksége a PowerShell-rel. Pontosabban:

  • Windows PowerShell 3 vagy újabb
  • . NET Framework 4.5 vagy újabb

további ilyen tippeket szeretne?, Nézze meg a személyes PowerShell blogomat a következő címen: https://nkasco.com/FriendsOfATA

tömbök létrehozása PowerShell

sokféle módon hozhat létre tömböket PowerShell segítségével. Tegyük fel, hogy van egy lista a nevek, hogy meg kell feldolgozni valahogy az alábbiak szerint.

JohnSusieJimJohnnyCarrie

épület tömbök vesszővel elválasztott elemeken keresztül

a tömb létrehozásának legalapvetőbb módja az ismert bemenetek egyszerű hozzárendelése, vesszővel elválasztva, egy változóhoz, az alábbiak szerint.,

$BasicArray = "John", "Susie", "Jim", "Johnny", "Carrie"

Ha a GetType() metódust futtatja a PowerShell összes objektumán, látni fogja, hogy sikeresen létrehozott egy tömböt, amint azt a BaseType tulajdonság mutatja.

PS51> $BasicArray.GetType()IsPublic IsSerial Name BaseType -------- -------- ---- -------- True True Object System.Array

a

Alexpressziós operátor segítségével PowerShellben tömböket is létrehozhat egy alexpressziós operátoron keresztül. Ezt a koncepciót általában akkor használják, ha nem tudja, hány elem kerül hozzáadásra a tömbhöz. Az eredmény nulla vagy sok elemet tartalmazhat létrehozáskor.,

Megjegyzés A$MyArray nevű tömb alatt nulla elemet hoztak létre.

#Create an empty array with the sub-expression operatorPS51> $MyArray = @()PS51> $MyArray.count0

a tartomány operátor használata

a tömbök nem csak a karakterláncok tárolására korlátozódnak a fentiek szerint. Tömböket is létrehozhat más objektumtípusokkal, például egészekkel.

Ha egy sor egész számra van szüksége szekvenciális sorrendben, akkor parancsikont készíthet, és használhatja a .. operátort. Az alábbiakban látható egy tömb jött létre az egészek 2-5 egy sor kódot.,

PS51> $NumberedArray = 2..5PS51> $NumberedArray2345

PowerShell ArrayList gyűjtemények létrehozása

a PowerShell ArrayList használata szintén olyan módszer, amellyel tárolhatja a PowerShell elemek listáját. Az ArrayList osztály a rendszer része.Gyűjtemények névtér belül. NET. létrehozásával egy új objektum az ilyen típusú akkor majd tárolja az objektumokat egy ArrayList.

Az alábbiakban látható, hogy kifejezetten létre kell hoznia egy ArrayList objektumot a New-Object parancsmaggal, vagy egy szabványos tömböt egy ArrayList objektumra öntve.,

vegye figyelembe, hogy ebben az esetben aBaseType objektum, míg a fenti példák olyan tömbök Alaptípusait tartalmazzák, amelyek öröklést mutatnak az Objektumosztályból. Végül a PowerShell hozzáférést biztosít a. net típusú rendszerhez.

Elemek hozzáadása egy tömbhöz

tömb létrehozásakor megadhatja az összes elemet a létrehozás időpontjában, vagy ad hoc módon hozzáadhatja őket.

elemek meglévő gyűjteményhez való hozzáadásához használhatja a +=operátort vagy a Add metódust. De tudja, hogy jelentős különbségek vannak a működésük módjában.,

a@() szabványos tömb létrehozásakor a+= operátort használja, de az ArrayList elemeinek hozzáadásához aAdd metódust használja. Ezek a módszerek abban különböznek, hogy a += operátor ténylegesen elpusztítja a meglévő tömböt, és létrehoz egy újat az új elem.

a bemutatáshoz az alábbiakban a IsFixedSize tulajdonságra hivatkozhat egy tömb vagy ArrayList számára, hogy tudja, melyik változhatatlan, és melyik nem.,

PS51> $BasicArray.IsFixedSizeTruePS51> $MyArrayList.IsFixedSizeFalse

mivel az alap tömb rögzített méretű gyűjtemény, nem módosíthatja.

aAdd() metódus használata fix méretű tömbbel hibát eredményez a rögzített méret miatt. Az alábbiakban néhány példát láthat, amelyekben sikeresen hozzáadhat elemeket egy tömbhöz.

#Does NOT work$BasicArray.Add("Nate")#Works$BasicArray += "Nate"$MyArrayList.Add("Nate")$MyArrayList += "Nate"

Elemeket Egy Tömb

Most, hogy jobban megértsük, hogyan kell hozzáadni a tételek egy tömb, hadd fedezze egy néhány módon lehet eltávolítani az elemeket egy tömb.,

mivel az alap tömb rögzítve van,nem távolíthatja el az elemeket. Ehelyett teljesen új tömböt kell létrehoznia. Például eltávolíthat egy elemet egy tömbből egy feltételes kijelentés létrehozásával, amely csak azoknak az elemeknek felel meg, amelyeket be szeretne vonni. Az alábbiakban egy példa látható.

$NewBasicArray = $BasicArray -ne "Nate"

mivel az ArrayList nincs rögzítve, eltávolíthatja az elemeket a Remove() módszerrel. Ez az egyik forgatókönyv, amelyben egy ArrayList előnyös lehet, ha azt tervezi, hogy gyakran hozzá/eltávolítása elemeket.,

$MyArrayList.Remove("Nate")

meghatározott elemek lekérdezése egy tömbből vagy Arraylistából

bizonyos elemek lekéréséhez egy tömbből vagy Arraylistából számos különböző módszert használhat. Hasonlóan a PowerShell többi objektumához, a tömb összes eleméhez egyszerűen az objektum hívásával férhet hozzá.

PS51> $BasicArrayJohnSusieJimJohnnyCarrie

talán csak az első elemet kell letölteni, a tömbök mindig 0 eredetűek, ami a tömb első elemét képviseli. A tömb első elemének lekéréséhez adja meg az indexszámot zárójelben az alábbiak szerint.,

PS51> $BasicArrayJohn

fordítva, akkor is Referencia indexek visszafelé egy kötőjel (negatív indikátor), hogy hívja az utolsó X elemek száma a tömb. A tömb utolsó elemének megtalálásának általános módja a -1 használata az alábbiak szerint.

PS51> $BasicArrayCarrie

a tartomány operátor, hogy tanult a fenti is lehet használni, hogy letölteni tárgyak egy tömb követve ugyanazt a módszert hívja az elemeket. Tegyük fel, hogy az első négy nevet a $BasicArray tömbben szeretné letölteni.,

az alábbiakban látható, megadhatja a 0-3 indexek tartományát, amely visszaadja az első négy elemet.

PS51> $BasicArrayJohnSusieJimJohnny

tömbök optimalizálása PowerShell

most, hogy jó alapja van a tömbök létrehozásának és manipulálásának, melyiket kell használni? Ennek megválaszolásához sétáljunk át néhány példát a Measure-Command cmdlet segítségével. A Measure-Command cmdlet használatával jobban megértheti, hogy mennyi ideig tart a parancsok az elemek feldolgozására, mivel azok áthaladnak a csővezetéken.,

Általánosságban elmondható, hogy ha van egy kis objektumgyűjteménye, akkor valószínűleg nem fog észrevenni sok különbséget a tömbök manipulálásával. Ha azonban nagy objektumgyűjteménye van, fontos megérteni a különbségeket az optimális eredmények elérése érdekében.

alkalmazzuk azt, amit az előző szakaszban megtanultunk a += és a Add() módszer közötti különbségről, 50 000 tétel hurokkal.

először hozzon létre egy üres tömböt és egy üres Tömblistát az alábbiak szerint.,

PS51> $MyArray = @()PS51> $MyArrayList = @()

ezután töltsön be 50 000 elemet minden gyűjteményben a tartomány operátor és a foreach hurok segítségével, az alábbiak szerint.

@(0..50000).foreach({$MyArray += $_})@(0..50000).foreach({$MyArrayList.Add($_)})

végül csomagolja be a parancsokat egy kifejezésbe, majd adja át ezt a kifejezést a Measure-Command cmdlet-nek. A Measure-Command kifejezés végrehajtásával láthatja, hogy mennyi ideig tart az egyes folyamatok végrehajtása.

ne feledje, hogy ahogy korábban megtanultad, += valójában egy új tömböt hoz létre, nem pedig egy rögzített tömbhöz.,

az eredmény? Közel 60 másodperc, szemben a 139 milliszekundummal!

mint látható, sokkal gyorsabb az ArrayList kihasználása nagy gyűjteményekhez, nem pedig rögzített méretű tömb használata.

bár ez egy alapvető példa, hangsúlyozza annak fontosságát, hogy megértsük, mit csinál a kód a feldolgozás során. Ha nem megfelelően értik, ez rossz felhasználói élményt eredményezhet.,

ha van olyan meglévő szkriptje, amely előnyös lehet egy ArrayList használatával, nem pedig egy tömb használatával, ez fantasztikus lehetőséget kínál egy éjszakai javulásra!

további olvasás

  • összehasonlítása tömbök PowerShell
  • hogyan lehet létrehozni tömbök teljesítmény PowerShell (MCPmag)

szeretne több tipp, mint ez? Nézze meg a személyes PowerShell blogomat: https://nkasco.com/FriendsOfATA.