Ofte når du skriver PowerShell-skript, må du ha en måte å lagre et sett av elementer. En vanlig måte å oppnå dette på er med en matrise eller en bestemt type kjent som en ArrayList. Men hva er en matrise likevel? En matrise er en datastruktur som er designet for å lagre en samling av elementer. Dette kan omfatte både samme og forskjellige typer av elementer.

Matriser er brukt i mange forskjellige programmeringsspråk og PowerShell er ikke annerledes. Det er mange måter å lage, manipulere, og optimalisere matriser., I denne artikkelen vil du lære om ArrayLists, Matriser, og Samlinger, samt noen eksempler på beste praksis når du søker dem med PowerShell.

Innholdsfortegnelse

Forutsetninger/Krav

Siden vil du bare være å jobbe med PowerShell-språk i seg selv, det er ingen miljømessige forutsetninger. Du trenger bare å ha en Windows-PC med PowerShell. Mer spesifikt:

  • Windows PowerShell 3 eller nyere
  • .NET Framework 4.5 eller senere

Vil du ha flere tips som dette?, Sjekk ut min personlige PowerShell blogg på: https://nkasco.com/FriendsOfATA

Opprette Tabeller med PowerShell

Det er mange forskjellige måter å lage arrays med PowerShell. La oss anta at du har en liste over navn som du trenger for å behandle en eller annen måte, som vist nedenfor.

JohnSusieJimJohnnyCarrie

Bygning-Matriser via Komma-Separert Elementer

Den mest grunnleggende måten kan du opprette en matrise er å bare gi kjent innganger, atskilt med komma, til en variabel som vist nedenfor.,

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

Hvis du kjører GetType() metoden som er tilgjengelig på alle objekter i PowerShell, vil du se at du har opprettet en tabell som angitt av BaseType holderen som vist nedenfor.

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

ved Hjelp av Sub-Uttrykk Operatør

Du kan også lage arrays i PowerShell via en sub-uttrykk operatør. Dette begrepet er ofte brukt når du ikke vet hvor mange elementer som vil bli lagt til i gruppen. Resultatet kan inneholde null eller mange elementer når de opprettes.,

legg Merke til at under en array kalt $MyArray har blitt opprettet med null elementer inni.

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

Bruk av Området Operatør

Matriser er ikke bare henvist til lagring av strenger, som vist ovenfor. Du kan også lage arrays med andre objekttyper som heltall.

Hvis du trenger en tabell av heltall i rekkefølge, kan du ta en snarvei og bruke ulike .. operatør. Nedenfor kan du se et utvalg ble opprettet med heltall 2 til 5 med en eneste linje med kode.,

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

Opprette PowerShell ArrayList Samlinger

ved Hjelp av en PowerShell ArrayList er også en måte der du kan lagre en liste over elementer med PowerShell. Den ArrayList klasse er en del av Systemet.Samlinger navnerom innenfor .NET. Ved å opprette et nytt objekt av denne typen du kan deretter lagre objekter i en ArrayList.

Nedenfor kan du se at du trenger for å lage en ArrayList-objekt ved hjelp av New-Object cmdlet eller ved å kaste et standard utvalg til en ArrayList objekt.,

legg Merke til at i dette tilfellet BaseType er et objekt, mens eksemplene ovenfor har BaseTypes av Matriser som viser arv fra Object-klassen. Til slutt, PowerShell er og gir deg tilgang til den .NETTO type system.

Legge til Elementer Til En Matrise

Når du oppretter en tabell, kan du enten angi alle elementer i etableringen tid eller legge dem ad-hoc.

for Å legge til elementer til en eksisterende samling, kan du bruke += operatør eller Add metode. Men vet at det er store forskjeller på hvordan de opererer.,

Når du oppretter en standard utvalg med @(), vil du bruke += operatør, men for å legge til elementer til en ArrayList, vil du bruke Add metode. Disse metodene er ulike i at += operatør faktisk ødelegger eksisterende matrise og skaper en ny med det nye elementet.

for Å demonstrere, vil du se nedenfor kan du sjekke IsFixedSize eiendom for en matrise eller ArrayList å vite noe som er uforanderlig, og hvilke som ikke er det.,

PS51> $BasicArray.IsFixedSizeTruePS51> $MyArrayList.IsFixedSizeFalse

Siden en grunnleggende matrise er en samling av fast størrelse, kan du ikke endre det.

du Prøver å bruke det Add() metode med et utvalg som er fast størrelse, vil det resultere i en feil på grunn av den tillatte størrelse. Nedenfor kan du se et par eksempler som du kan lykkes med å legge til elementer i en matrise.

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

Fjerne Elementer Fra En Matrise

Nå som du har en bedre forståelse av hvordan du legger til elementer i en matrise, la oss dekke et par måter du kan fjerne elementer fra en matrise.,

Siden en grunnleggende matrise er løst, kan du ikke fjerne elementer fra dem. I stedet, du må opprette en helt ny rekke. Du kan For eksempel fjerne ett enkelt element fra en tabell ved å opprette et betinget utsagn som bare passer for de elementene du vil inkludere. Et eksempel er vist nedenfor.

$NewBasicArray = $BasicArray -ne "Nate"

Siden en ArrayList ikke er løst, kan du fjerne elementer fra dem ved hjelp av Remove() metode. Dette er en situasjon der du bruker en ArrayList kan være til nytte for deg hvis du har tenkt til å være hyppig å legge til/fjerne elementer.,

$MyArrayList.Remove("Nate")

Gjenopprette Spesifikke Elementer Fra En tabell eller ArrayList

for Å hente spesifikke elementer fra en tabell eller ArrayList du kan bruke mange forskjellige metoder. Mye som andre objekter i PowerShell, kan du få tilgang til alle elementene i en array ved å bare kalle objektet.

PS51> $BasicArrayJohnSusieJimJohnnyCarrie

Kanskje du trenger bare å hente det første elementet, matriser vil alltid ha en opprinnelse av 0, som representerer det første elementet i tabellen. For å hente den første element i en matrise, angi indeks nummer i parentes, som vist nedenfor.,

PS51> $BasicArrayJohn

og Omvendt, du kan også referanse indekser bakover ved hjelp av en bindestrek (negativ indikator) for å ringe det sist X antall av elementene fra tabellen. En vanlig måte å finne den siste element i en matrise er ved hjelp av -1 som vist nedenfor.

PS51> $BasicArrayCarrie

området operatør som du har lært om ovenfor kan også brukes til å hente objekter i en matrise ved å følge samme metode for å ringe elementer. La oss si at du ønsker å hente de fire første navnene i $BasicArray array.,

Du kan se nedenfor, kan du angi en rekke indekser 0-3 som vil returnere den første av fire elementer.

PS51> $BasicArrayJohnSusieJimJohnny

Optimalisere Matriser med PowerShell

Nå har du et godt grunnlag om hvordan å opprette og manipulere matriser, hvilken bør du bruke? For å svare på det, la oss gå gjennom noen eksempler med Measure-Command cmdleten. Ved hjelp av Measure-Command cmdlet, du vil forstå bedre hvordan lange kommandoer tar å behandle elementer som de er gått ned rørledningen.,

Generelt sett, hvis du har en liten samling av objekter du vil sannsynligvis ikke merke mye forskjell med hvordan du behandler dine matriser. Imidlertid, hvis du har en stor samling av gjenstander det er viktig å forstå forskjellene for å oppnå optimale resultater.

La oss bruke hva du nettopp har lært i tidligere avsnitt om forskjellen mellom += og bruk av Add() metode med en sløyfe på 50 000 elementer.

Først må du opprette en tom tabell og et tomt ArrayList som vist nedenfor.,

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

Neste, fyller du ut 50,000 elementer i hver samling bruke spekter operatør og en foreach sløyfe som vist nedenfor.

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

til Slutt, vikle kommandoer i et uttrykk, og pass på at uttrykket til Measure-Command cmdleten. Ved å utføre uttrykk med Measure-Command, kan du se hvor lang tid hver prosess faktisk tar å utføre.

husk at det som du har lært før, += faktisk skaper en ny array snarere enn å legge til en fast én.,

hva er resultatet? Nesten 60 sekunder versus 139 millisekunder!

Som du kan se, det er mye raskere å utnytte en ArrayList for store samlinger i stedet for å bruke en fast størrelse tabellen.

Selv om dette er et grunnleggende eksempel, det understreker viktigheten av å forstå hva koden gjør i løpet av behandlingen. Hvis ikke er riktig forstått, kan det resultere i en dårlig brukeropplevelse.,

Hvis du har noen eksisterende skript som kan ha nytte av å bruke en ArrayList snarere enn en matrise, dette ville presentere en fantastisk mulighet til å gjøre en overnatting forbedring!

Mer å Lese

  • for å Sammenligne matriser med PowerShell
  • Hvordan Å Lage Matriser for Ytelse i PowerShell (MCPmag)

Vil du ha flere tips som dette? Sjekk ut min personlige PowerShell blogg på: https://nkasco.com/FriendsOfATA.