Usein kun kirjoittaa PowerShell skriptejä, sinun täytyy tapa tallentaa joukko kohteita. Yksi yhteinen tapa saavuttaa tämä on array, tai tiettyä tyyppi tunnetaan ArrayList. Mutta mikä on array? Array on tietorakenne, joka on suunniteltu tallentamaan kokoelma kohteita. Tämä voi sisältää sekä samoja että erilaisia kohteita.

matriiseja käytetään monissa eri ohjelmointikielissä, eikä PowerShell ole erilainen. On monia tapoja luoda, manipuloida ja optimoida matriiseja., Tässä artikkelissa opit noin arraylist: eihin, Taulukot, ja Kokoelmat sekä joitakin parhaita käytäntöjä, kun niitä sovelletaan Powershellissa.

Sisällysluettelo

Edellytykset/Vaatimukset

Koska sinun täytyy vain olla kanssa PowerShell kieli itsessään, ei ole olemassa ympäristöllisiä edellytyksiä. Sinun tarvitsee vain olla Windows PC PowerShell. Tarkemmin:

  • Windows PowerShell 3 tai uudempi
  • .NET Framework 4.5 tai uudempi

Haluatko lisää vinkkejä, kuten tämä?, Check out my henkilökohtainen PowerShell blogi osoitteessa: https://nkasco.com/FriendsOfATA

Luo Taulukot Powershellissa

On olemassa monia erilaisia tapoja luoda taulukoita Powershellissa. Oletetaan sinulla on luettelo nimistä, jotka sinun täytyy käsitellä jotenkin kuten alla.

JohnSusieJimJohnnyCarrie

Rakennus Taulukot kautta Pilkulla Erotetut Elementit

alkeellisinta tapa, jolla voit luoda array on yksinkertaisesti määrittää tiedossa tuloa, pilkulla erotettuna, muuttujaan, kuten seuraavassa kuvassa.,

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

Jos suoritat GetType() menetelmä saatavilla kaikki esineet PowerShell, näet, että sinulla on onnistuneesti luotu array kuten merkitty BaseType kiinteistön alla.

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

Käyttää Sub-Ilmaisun Operaattori

Voit myös luoda taulukot PowerShell kautta sub-ilmaisun operaattori. Tämä käsite on yleisesti käytetty, kun et tiedä, kuinka monta kohdetta lisätään array. Tuloksena voi olla nolla, tai monia kohteita luotaessa.,

Ilmoitus alla array nimeltään $MyArray on luotu nolla-elementtejä sisällä.

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

Käyttämällä Range Operator

Taulukot eivät ole vain taka tallentaa merkkijonoja, kuten edellä on osoitettu. Voit myös luoda matriiseja muiden objektityyppien kuten kokonaislukujen kanssa.

Jos tarvitset joukko kokonaislukuja järjestyksessä, voit oikaista ja käyttää alue .. operaattori. Alla näet array luotiin kokonaislukuja 2-5 yhden rivin koodi.,

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

Luo PowerShell ArrayList Kokoelmat

Käyttämällä PowerShell ArrayList on myös tapa, jolla voit tallentaa luettelon kohteilla Powershellissa. Arraylistinen luokka on osa järjestelmää.Collections nimiavaruus sisällä. NET. luomalla uuden objektin tämäntyyppisen voit tallentaa esineitä sisällä ArrayList.

Alla voit nähdä, että sinun täytyy erikseen luoda ArrayList objektin New-Object cmdlet-komentoa tai valamalla standardi array ArrayList-olioon.,

Huomaa, että tässä tapauksessa BaseType on esine, ottaa huomioon, että edellä mainitut esimerkit ovat BaseTypes Taulukot, jotka näyttely perintö Object-luokan. Viime kädessä PowerShell tarjoaa pääsyn. Net-tyyppiseen järjestelmään.

Lisäämällä Kohteita Array

Kun luot taulukon, voit joko määrittää kaikki elementit luomisen aikana tai lisätä niitä ad-hoc.

lisätä elementtejä olemassa olevan kokoelma, voit käyttää += operaattori tai Add menetelmä. Mutta tiedä, että niiden toiminnassa on suuria eroja.,

Kun luot standardi array @(), voit käyttää += operaattori, mutta lisätä elementtejä ArrayList, että käyttäisit Add menetelmä. Nämä menetelmät eroavat siinä, että += operaattori itse tuhoaa olemassa array ja luo uusi, uusi kohde.

osoittaa, näet alla voit viitata IsFixedSize kiinteistön taulukko tai ArrayList tietää, mikä on muuttumaton ja mikä ei.,

PS51> $BasicArray.IsFixedSizeTruePS51> $MyArrayList.IsFixedSizeFalse

Koska perus-joukko on kokoelma kiinteä koko, et voi muokata sitä.

Yritetään käyttää Add() menetelmä, jossa joukko, joka on kiinteä koko aiheuttaa virheen johtuen kiinteä koko. Alla näet muutamia esimerkkejä, joissa voit onnistuneesti lisätä kohteita array.

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

Poistamalla Kohteita Array

Nyt sinulla on parempi käsitys siitä, miten lisätä kohteita array, peitetään muutamia tapoja, joilla voit poistaa kohteita array.,

koska perusjoukko on kiinteä, niistä ei voi poistaa kohteita. Sen sijaan, sinun täytyy luoda täysin uusi array. Voit esimerkiksi poistaa yhden elementin joukosta luomalla ehdollisen lausuman, joka vastaa vain niitä elementtejä, jotka haluat sisällyttää. Alla on esimerkki.

$NewBasicArray = $BasicArray -ne "Nate"

Koska ArrayList ei ole korjattu, voit poistaa osia niistä käyttäen Remove() menetelmä. Tämä on yksi skenaario, jossa käyttämällä ArrayList voi hyödyttää sinua, jos aiot olla usein lisäämällä / poistamalla kohteita.,

$MyArrayList.Remove("Nate")

Haetaan Tiettyjä Kohteita Taulukko tai ArrayList

hakea tiettyjä kohteita taulukko tai ArrayList voit käyttää monia eri menetelmiä. Kuten muutkin Powershellissa olevat objektit, voit käyttää kaikkia matriisin elementtejä yksinkertaisesti kutsumalla objektia.

PS51> $BasicArrayJohnSusieJimJohnnyCarrie

Ehkä sinun täytyy vain hakea ensimmäinen osa, taulukot tulee aina olla peräisin 0 eli ensimmäinen osa array. Voit hakea ensimmäinen osa array, määritä Indeksinumero suluissa kuten alla.,

PS51> $BasicArrayJohn

Käänteisesti, voit myös viittaus indeksit taaksepäin käyttämällä dash (negatiivinen indikaattori) soittaa viimeisen X määrä elementtejä jono. Yleinen tapa löytää viimeinen elementti array on käyttää -1 kuten alla.

PS51> $BasicArrayCarrie

range operator, että olet oppinut edellä voidaan käyttää myös hakea esineitä array noudattamalla samaa menetelmää soittamalla elementtejä. Oletetaan, että haluat hakea neljä ensimmäistä nimet $BasicArray array.,

näet alla voit määrittää joukon indeksejä 0-3, jotka palauttavat neljä ensimmäistä elementtiä.

PS51> $BasicArrayJohnSusieJimJohnny

Optimoimalla Taulukot Powershellissa

Nyt sinulla on hyvä perusta, miten voit luoda ja manipuloida taulukot, joista yksi tulisi käyttää? Tähän vastatakseen kävellään muutaman esimerkin läpi Measure-Command cmdlet. Käyttämällä Measure-Command cmdlet, sinun on parempi ymmärtää, kuinka kauan komennot vievät käsitellä elementtejä, kun ne siirretään alas putkea.,

Yleisesti ottaen, jos sinulla on pieni kokoelma esineitä, et todennäköisesti huomaa mitään eroa, miten voit manipuloida taulukot. Kuitenkin, jos sinulla on suuri kokoelma esineitä on tärkeää ymmärtää eroja saavuttaa optimaalisia tuloksia.

katsotaanpa soveltaa, mitä olet oppinut ennen osio ero += ja käyttää Add() menetelmä silmukka 50000 kohteita.

ensin, Luo tyhjä array ja tyhjä ArrayList kuten alla.,

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

Seuraavaksi kansoittavat 50,000 elementtejä kussakin kokoelma käyttäen välillä operaattori ja foreach-silmukan, kuten on esitetty alla.

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

Lopuksi, kääri komentoja ilmaus ja tapahtui, että lauseke Measure-Command cmdlet-komentoa. Suorittamalla ilme Measure-Command, voit nähdä, kuinka kauan kunkin prosessin todella kestää suorittaa.

Pidä mielessä, että olet oppinut ennen, += itse asiassa luo uuden taulukon sijaan liittämällä kiinteään yksi.,

tulos? Lähes 60 sekuntia vastaan 139 millisekuntia!

kuten näet, on paljon nopeampaa hyödyntää ArrayList suurille kokoelmille kuin käyttää kiinteän kokoista array.

Vaikka tämä on perus esimerkki, se korostaa, että on tärkeää ymmärtää, mitä koodi tekee käsittelyn aikana. Jos sitä ei ymmärretä oikein, se voi johtaa huonoon käyttökokemukseen.,

Jos sinulla on olemassa skripti, joka voi hyötyä käyttämällä ArrayList sijaan array, tämä voisi esittää loistava tilaisuus tehdä yhdessä yössä parannus!

kirjallisuutta

  • Vertailu taulukot Powershellissa
  • Miten Luoda Taulukoita Suorituskykyä PowerShell (MCPmag)

Haluatko lisää vinkkejä, kuten tämä? Check out my personal PowerShell blog at: https://nkasco.com/FriendsOfATA.