Ofte gange, når du skriver PowerShell-scripts, du har brug for en måde til at gemme et sæt af poster. En almindelig måde at opnå dette på er med et array eller en bestemt type kendt som en ArrayList. Men hvad er en Matri?alligevel? Et array er en datastruktur, der er designet til at gemme en samling af varer. Dette kan omfatte både samme og forskellige typer af varer.

Arrays bruges i mange forskellige programmeringssprog, og Po .ershell er ikke anderledes. Der er mange måder at oprette, manipulere og optimere arrays på., I denne artikel lærer du om arraylister, Arrays og samlinger samt nogle bedste fremgangsmåder, når du anvender dem med Po .ershell.

Indholdsfortegnelse

særlige Forudsætninger/Krav

Da du kun arbejder med PowerShell sproget i sig selv, der er ingen miljømæssige forudsætninger. Du skal bare have en PCINDO .s-PC med Po .ershell. Mere specifikt:

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

Ønsker du flere tips som dette?, Tjek min personlige PowerShell blog på: https://nkasco.com/FriendsOfATA

Oprettelse af Arrays med PowerShell

Der er mange forskellige måder at lave arrays med PowerShell. Lad os antage, at du har en liste over navne, som du skal behandle på en eller anden måde som vist nedenfor.

JohnSusieJimJohnnyCarrie

Bygningsarrays via kommaseparerede elementer

den mest grundlæggende måde, du kan oprette et array på, er blot at tildele kendte indgange, kommaseparerede, til en variabel som vist nedenfor.,

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

Hvis du kører GetType() metode til rådighed på alle objekter i PowerShell, vil du se, at du har oprettet en array, som er angivet med BaseType ejendommen, der er vist nedenfor.

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

brug af Subekspressionsoperatøren

Du kan også oprette arrays i Po .ershell via en subekspressionsoperatør. Dette koncept er almindeligt anvendt, når du ikke ved, hvor mange elementer vil blive føjet til din Matri.. Resultatet kan indeholde nul eller mange elementer, når de oprettes.,Bemærk under et array kaldet $MyArray er oprettet med nulelementer inde.

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

brug af Områdeoperatøren

Arrays er ikke kun henvist til lagring af strenge som vist ovenfor. Du kan også oprette arrays med andre objekttyper som heltal.

Hvis du har brug for en række heltal i rækkefølge, kan du tage en genvej og bruge området .. operatør. Nedenfor kan du se et array blev oprettet med heltal 2 til 5 med en enkelt linje kode.,

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

Oprettelse af PowerShell ArrayList Samlinger

ved Hjælp af en PowerShell ArrayList er også en måde, hvorpå du kan gemme en liste af elementer med PowerShell. ArrayList-klassen er en del af systemet.Navneområde for samlinger inden for. NET. ved at oprette et nyt objekt af denne type kan du derefter gemme objekter inden for en ArrayList.

nedenfor kan du se, at du eksplicit skal oprette et ArrayList-objekt ved hjælp af New-Object cmdlet eller ved at støbe et standardarray til et ArrayList-objekt.,

Bemærk, atBaseType i dette tilfælde er et objekt, mens ovenstående eksempler har Basetyper af Arrays, der udviser arv fra Objektklassen. I sidste ende giver Po .ershell adgang til.net type system.

tilføjelse af elementer til et Array

Når du opretter et array, kan du enten definere alle elementerne på oprettelsestidspunktet eller tilføje dem ad hoc.

til At tilføje elementer til en eksisterende samling, kan du bruge += operatør eller Add metode. Men ved, at der er store forskelle i, hvordan de fungerer.,

Når du opretter et standard array med @(), du vil bruge += aktør, men at tilføje elementer til en ArrayList, du vil bruge Add metode. Disse metoder adskiller sig ved, at+= – operatøren faktisk ødelægger det eksisterende array og opretter en ny med det nye element.

for at demonstrere, vil du se nedenfor, kan du henvise til IsFixedSize egenskaben for et array eller en ArrayList for at vide, hvilket er uforanderligt, og hvilket ikke.,

PS51> $BasicArray.IsFixedSizeTruePS51> $MyArrayList.IsFixedSizeFalse

da et grundlæggende array er en samling af fast størrelse, kan du ikke ændre det.hvis du forsøger at bruge Add() – metoden med et array, der er fast størrelse, vil det resultere i en fejl på grund af den faste størrelse. Nedenfor kan du se et par eksempler, hvor du med succes kan tilføje elementer til en Matri..

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

Fjernelse af Elementer Fra En bred Vifte

Nu, at du har en bedre forståelse af, hvordan sådan tilføjer du elementer i et array, lad os dække et par måder, du kan fjerne elementer fra et array.,

da et grundlæggende array er rettet, kan du ikke fjerne elementer fra dem. I stedet skal du oprette et helt nyt array. For eksempel kan du fjerne et enkelt element fra en Matri array ved at oprette en betinget erklæring, der kun matcher de elementer, du gerne vil medtage. Et eksempel er vist nedenfor.

$NewBasicArray = $BasicArray -ne "Nate"

da en ArrayList ikke er rettet, kan du fjerne elementer fra dem ved hjælp af Remove() – metoden. Dette er et scenario, hvor brug af en ArrayList kan gavne dig, hvis du planlægger at være ofte tilføje/fjerne elementer.,

$MyArrayList.Remove("Nate")

Hentning af Elementer Fra Et Array eller ArrayList

for At hente elementer fra et array eller ArrayList du kan bruge mange forskellige metoder. Ligesom andre objekter i Po .ershell kan du få adgang til alle elementer i en Matri.ved blot at ringe til objektet.

PS51> $BasicArrayJohnSusieJimJohnnyCarrie

måske skal du kun hente det første element, arrays vil altid have en oprindelse på 0, der repræsenterer det første element i arrayet. For at hente det første element i et array skal du angive indeksnummeret i parentes som vist nedenfor.,

PS51> $BasicArrayJohn

omvendt kan du også henvise indekser baglæns ved hjælp af en bindestreg (negativ indikator) for at kalde det sidste number-antal elementer fra arrayet. En almindelig måde at finde det sidste element i en Matri array bruger -1 som vist nedenfor.

PS51> $BasicArrayCarrie

området operatøren, at du har lært om ovenfor kan også bruges til at hente objekter i et array ved at følge den samme metode for at kalde elementer. Lad os sige, at du vil hente de første fire navne i $BasicArray array.,

Du kan se nedenfor kan du angive en række indekser 0-3, som vil returnere de første fire elementer.

PS51> $BasicArrayJohnSusieJimJohnny

Optimering af Arrays med PowerShell

Nu, at du har et godt fundament for, hvordan at oprette og manipulere arrays, hvilket skal man bruge? For at besvare det, lad os gå gennem et par eksempler med Measure-Command cmdlet. Ved hjælp af Measure-Command cmdlet forstår du bedre, hvor lang tid kommandoer tager at behandle elementer, når de sendes ned ad rørledningen.,

generelt, hvis du har en lille samling af objekter, vil du sandsynligvis ikke mærke meget forskel med, hvordan du manipulerer dine arrays. Men hvis du har en stor samling af objekter, er det vigtigt at forstå forskellene for at opnå optimale resultater.

lad os anvende det, du lige har lært i det foregående afsnit om forskellen mellem +=og bruge Add() metode med en løkke på 50.000 genstande.

Opret først et tomt array og en tom ArrayList som vist nedenfor.,

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

udfyld derefter 50.000 elementer i hver samling ved hjælp af rækkeoperatøren og en foreach-løkke som vist nedenfor.

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

til sidst skal du pakke dine kommandoer i et udtryk og overføre dette udtryk til Measure-Command cmdlet. Ved at udføre udtrykket med Measure-Command, kan du se, hvor lang tid hver proces faktisk tager at udføre.

Husk, at som du lærte før, opretter += faktisk et nyt array i stedet for at tilføje til en fast.,

resultatet? Næsten 60 sekunder mod 139 millisekunder!

som du kan se, er det meget hurtigere at udnytte en ArrayList til store samlinger i stedet for at bruge en fast størrelse array.

selvom dette er et grundlæggende eksempel, understreger det vigtigheden af at forstå, hvad din kode gør under behandlingen. Hvis det ikke forstås korrekt, kan det resultere i en dårlig brugeroplevelse.,

Hvis du har et eksisterende script, der kunne drage fordel af at bruge en ArrayList snarere end et array, ville dette give en fantastisk mulighed for at gøre en forbedring natten over!

Yderligere Læsning

  • Sammenligne matrixer med PowerShell
  • Hvordan til At Skabe Arrays for Performance i PowerShell (MCPmag)

Ønsker du flere tips som dette? Tjek min personlige Po .ershell-blog på: https://nkasco.com/FriendsOfATA.