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.