Articles

Po .ershell Array Guide: Sådan bruges og oprettes

Arrays er et grundlæggende træk ved Po .ershell. Arrays gør det muligt at indtage, manipulere og output sande datastrukturer (og ikke kun rå strenge). Denne funktion gør Po .ershell anderledes og mere nyttigt end andre scriptsprog.

i denne artikel forklarer vi, hvad arrays er, og hvordan man bruger dem i Po .ershell. Vi viser dig først, hvordan du opretter arrays i Po .ershell, og derefter hvordan du bruger grundlæggende funktioner til at manipulere dem., Så vil vi se på flere forskellige typer af arrays, og udforske nogle af de mere subtile funktioner i dem.

Få Gratis PowerShell og Active Directory-Essentials Video Kursus

jeg vil anbefale dette til både nye og avancerede PowerShell-brugere. Opbygning af en annonce værktøj er en stor og lærerig oplevelse.

Vores mål er at give dig en god jordforbindelse i at arbejde med arrays i PowerShell. Når du har mestret disse grundlæggende, kan du tage et kig på vores kursus om Po .ershell for at lære mere.,

  • Array Fundamentals
  • Arrays af Objekter
  • Operatører For Arrays
  • Hvordan til at Tilføje Værdier til et Array
  • Array-Typer
  • Avanceret Array Funktioner

PowerShell Arrays

Arrays er et fælles træk for næsten alle programmeringssprog. De er en datastruktur, der fungerer som en samling af flere stykker data. Når du arbejder med en Matri., kan du enten bruge den samme kommando til at udføre den samme funktion på hvert element i en Matri. eller få adgang til og manipulere individuelle elementer ved hjælp af et indeks.,Arrays i Po .ershell kan indeholde et eller flere elementer. Et element kan være en streng, et heltal, et objekt eller endda et andet array, og et array kan indeholde enhver kombination af disse elementer. Hver af disse elementer har et indeks, som altid starter (undertiden forvirrende) ved 0. Så det første element i en Matri index er givet indekset 0, den anden er indekseret som 1, og så videre.,

PowerShell arrays er en så grundlæggende del af PowerShell, som de vises i, i hvert PowerShell tutorial derude, og et godt kendskab til, hvordan man arbejder med dem, er kritisk for mange aspekter af at bruge PowerShell, fra konfigurere Office 365 til at bruge PowerShell til Pentesting.

Et Eksempel på en PowerShell Array

Den nemmeste måde at illustrere, hvad et array er at tage et eksempel. Lad os lave et array, der repræsenterer en skål frugt.,

Der er flere måder at oprette arrays i Powershell, men det nemmeste er at køre denne kommando:

@()

vil du oprette et tomt array. Et tomt array er dog ikke så nyttigt, så lad os tilføje nogle frugter til vores nye array. Disse vil blive repræsenteret som tekststrenge. For at gøre det skal du køre denne kommando

$fruit = @('Apples','Oranges','Bananas')

Dette vil navngive et array “frugt” og tilføje tre elementer til det., At se, at det har fungeret, kan du læse array ved hjælp af denne kommando:

PS /Users/yourname> $fruit

Der vil nu vende tilbage:

 Apples Oranges Bananas

Som du kan se, dette array er en gruppe af individuelle stykker af data. Po .ershell indekserer dem automatisk på den måde, vi har forklaret ovenfor: “Apple” indekseres som 0, “appelsiner” som 1 og “bananer” som 2.

dette eksempel kan få det til at virke som om arrays er ganske enkle objekter, og på en måde er de. Deres enkelhed er imidlertid også det, der gør dem så fleksible, kraftfulde genstande., I resten af denne guide giver vi dig en forsmag på, hvad du kan gøre med arrays.

array Fundamentals

i dette afsnit ser vi på de mest grundlæggende måder at oprette og arbejde med arrays i Po .ershell.

Opret et Array

først opretter vi et array. Den almindelige måde at gøre dette på er at bruge @(), selvom der er andre måder.

lad os nu oprette et array kaldet “data”. For at gøre dette skal du køre:

$data = @()

dette array er tomt i øjeblikket, fordi vi ikke har angivet nogen data for det., For at kontrollere, hvor mange varer der er i et array, kan vi bruge tællefunktionen:

$data.count

Som i øjeblikket returnerer et 0, fordi der ikke er nogen varer i vores array. At lave et array med nogle data i det, kan vi sætte disse data i parentes efter @:

$data = @('Zero','One','Two','Three')

Kør den samme tæller funktion nu, og du vil se, at der er 4 elementer i denne serie. For at se disse elementer igen, påberåber vi bare arrayet:

$data

som vil liste de elementer, vi lægger i arrayet.,

adgang til elementer

nu har vi en Matri., vi vil have adgang til elementer fra den. Der er flere måder at gøre dette på. Den første er at bruge indekset for elementerne i arrayet. Som vi sagde før, starter indekser ved 0, så for at hente det første element i vores array bliver vi nødt til at fortælle Po .ershell at se på det emne, hvis indeks er nul. Det gør vi ved at køre:

$data

Dette vil returnere “nul”, fordi det var den første streng, vi satte i vores array.,

Vi kan også udvide denne syntaks til at returnere flere elementer fra det samme array, bare ved at sætte flere indekser i den samme kommando. Kør for eksempel:

$data

dette returnerer “Zeroero t .o Three”. Varerne returneres i samme rækkefølge, som du indtastede indekserne. Du kan også bruge yderligere syntaks til at returnere sæt af elementer fra en Matri.. For eksempel:

$data

vil returnere alle elementer med et indeks mellem 1 og 3 (inklusive)., Og:

$data

Vil vende tilbage det sidste element i array ‘ et: den negative tal fortæller PowerShell til at tælle baglæns fra slutningen af arrayet, så i dette tilfælde, vil denne kommando vil vende tilbage “Tre”, det sidste element i vores test-array.

ændring af elementer

den samme metode kan bruges til at opdatere elementerne i en Matri.. For eksempel, for at opdatere post, hvis indeks er 2 (husk, at dette er det tredje element i array), kan vi køre:

$data = 'second'

Dette giver os direkte adgang til elementerne i et array.,

Gentaget Handlinger

En af de mest kraftfulde funktioner af PowerShell (og, i virkeligheden, af nogen kommando-line interface) er evnen til at udføre den samme handling på alle elementerne i et array. Der er en række forskellige måder at gøre dette på.

det mest grundlæggende er at bruge en rørledning, som er tegnet/. Når du sender et array til en pipeline, behandles hvert element i et array individuelt. Som vi har påpeget i vores artikel om PowerShell objekter og data rør, dette er ofte den enkleste måde at udføre gentaget handlinger.,

For eksempel, for at tilføje en beskrivelse til hvert element i vores array, kan vi bruge denne kommando:

$data | ForEach-Object {"Item: "}

Denne kommando fortæller PowerShell til at tage de elementer i $data en ad gangen, og derefter for hver af dem tilføj “Element:” til begyndelsen, efterfulgt af den oprindelige værdi.

Der er flere andre måder at udføre handlinger gentaget i PowerShell, hvoraf mange vil være bekendt, hvis du har brugt andre programmeringssprog: PowerShell omfatter ForEach-løkker, løkker, og Skifte sløjfer. Du kan finde flere oplysninger om disse i Microsoft-dokumentationen.,

Arrays af objekter

indtil videre har vi arbejdet med et array, der indeholder grundlæggende data: en streng. Men arrays kan også indeholde objekter, og mange af de mest almindelige anvendelser af PowerShell – lignende konfiguration af Office 365 – kræver, at du ved, hvordan man arbejder med objekter. Så lad os se på nogle grundlæggende kommandoer til at gøre det.

oprettelse af en række objekter

Vi kan oprette en række objekter på samme måde som vi gjorde med strenge ved hjælp af @ () – funktionen., For eksempel at lave en testliste over medarbejdere kan vi bruge:

de fleste cmdlets returnerer en Matri.af denne type, når du tildeler dem en variabel til at arbejde med.

adgang til objekter fra Arrays

den proces, vi kørte igennem ovenfor for at få adgang til individuelle datastykker, kan ligeledes bruges med arrays, der indeholder objekter., For eksempel kører:

$data

Vil vende tilbage:

 FirstName LastName ----- ---- Kevin Marquette

Alternativt, kan vi få adgang til egenskaberne af de enkelte objekter ved at angive, hvilken ejendom vi ville gerne inden for den samme kommando, som dette:

$data.FirstName

Der vil vende tilbage “Kevin”.

opdatering af objektegenskaber i Arrays

Når vi går videre, giver den samme syntaks os muligheden for at opdatere individuelle egenskaber inden for objekter, der holdes i arrays., For eksempel:

$data.FirstName = 'Jay'

vil opdatere Fornavneegenskaben i det første element i vores array til “Jay”.

adgang til alle ejendomme i en række objekter

i de fleste programmeringssprog skal vi bruge en iterativ proces (se ovenfor) for at få adgang til alle egenskaber i en række objekter. Vi kan gøre det i PowerShell, samt, naturligvis, ved at køre:

$data | ForEach-Object {$_.LastName}

Dette vil returnere en liste over alle de Efternavn egenskaber i vores array, men det er beregningsmæssigt dyrt og svært at skrive, hver gang du ønsker at se disse data., Så i stedet har Po .ershell en genvej. Kør dette:

$data.LastName

og du vil se den samme liste. Po .ershell tager faktisk hvert objekt igen, ligesom før, men det skjuler denne kompleksitet fra os.

Operatører For Arrays

Næsten alle de aktører, som vi bruger til de enkelte dataelementer i PowerShell vil også arbejde med arrays, men nogle af dem, der virker lidt anderledes, når det bruges på denne måde. Så lad os tage et kig på de mest almindelige operatører, og hvordan du kan bruge dem i arrays.,

-join

– join-operatøren er en af de mest anvendte kommandoer i Po .ershell, og det er yderst nyttigt, når du arbejder med arrays. Det kan bruges iterativt på elementerne i et array for at slutte dem sammen i output fra et array.

lad os tage et eksempel. Opret først et simpelt array:

$data = @(1,2,3,4)

og brug derefter-join til at indsætte en bindestreg mellem hvert element og output resultatet:

$data -join '-'

som vil returnere “1-2-3-4”., – Join-operatøren kan også bruges uden en afgrænsning, hvor emnerne i en Matri.kan udskrives som en række useparerede værdier.

-indeholder

– indeholder operator arbejder på arrays i en meget lignende måde at dens anvendelse med enkelte datapunkter. Du kan bruge den til at kontrollere, om et array indeholder en bestemt streng, og det vil udsende en boolsk værdi. For eksempel:

 PS> $data = @('red','green','blue') PS> $data -contains 'green' True

Ligestilling

Der er to operatører til kontrol for ligestilling i PowerShell: -eq og -ne., Hvis du er vant til at bruge disse på enkeltværdier, kan den måde, disse fungerer i forhold til arrays, virke lidt mærkelig. Hvis du bruger-E., for eksempel, operatøren vil ikke udsende en boolsk “sand”, men i stedet vil returnere objektet, der matcher.

For eksempel:

 PS> $data = @('red','green','blue') PS> $data -eq 'green' green

– ne-operatøren fungerer på samme måde, bortset fra at den giver dig alle de værdier, der ikke svarer til din angivne værdi., So:

 PS> $data = @('red','green','blue') PS> $data -ne 'green' red blue

Du kan dog bruge en if () – erklæring til at sammenligne output fra disse operatører med din forventede output og returnere en “sand” eller “falsk” output.

Sådan tilføjes værdier til et Array

efter alle instruktionerne ovenfor undrer du dig sandsynligvis over, hvorfor vi har udeladt at tilføje dataelementer til et array. Det er fordi der ikke er nogen måde at gøre det på. En Matri., når den først er oprettet, forbliver den samme størrelse for evigt, og for at gøre den større skal du kopiere den til en ny Matri. og slette originalen.,

det lyder kompliceret, men Po .ershell håndterer denne proces for dig ved hjælp af en række ret enkle operatører. Der er to hovedmåder til at gøre dette.

array-tilføjelse

Po .ershell kan tilføje to arrays sammen ved hjælp af ” + ” – operatøren, som skjuler kompleksiteten af, hvad systemet faktisk gør. For eksempel, hvis du laver to test arrays som dette:

 $first = @( 'Zero' 'One' ) $second = @( 'Two' 'Three' )

Du kan derefter føje dem sammen ved hjælp af blot:

 PS> $first + $second

Dette vil gøre et nyt array med alle fire værdier, og output resultaterne., Bemærk dog, at det ikke vil give dette nye array et nyt navn. For at gøre det bruger vi + = operatøren.

Plus Lig for at Kombinere Arrays

i Stedet for at bruge “+” operatør i ovenstående eksempel, kunne vi have brugt “+=” operatør, som vil give os et helt nyt array ‘ et:

 $first += 'Two, Three'

kommandoen ser simpelt, men det er til at skjule, hvad PowerShell er faktisk at gøre her. Det kopierer alle værdierne fra $først og laver et nyt array, der indeholder de ekstra værdier. Det sletter derefter den oprindelige array.,

Dette er noget problematisk, fordi det er beregningsmæssigt dyrt. Med små arrays bemærker du muligvis ikke, men med store mængder data kan denne metode hurtigt låse dit system op. Derfor har vi givet dig en vej rundt om dette problem nedenfor.

Array typer

indtil videre har vi beskæftiget os med standardarrays i Po .ershell. Selvom Po .ershell ikke fortalte os på det tidspunkt, er hvert array, vi har oprettet indtil videre, af en type,] typen. Denne type array kan indeholde enhver type dataværdi.,

stærkt indtastede Arrays

Der er dog tidspunkter, hvor du vil begrænse de typer data eller objekter, som et array kan holde til kun en. Vi kan gøre dette ved at bruge et stærkt skrevet array, som kun kan indeholde den specificerede datatype.for eksempel at lave et array, der kun kan tage heltal, kan vi bruge:

 PS> ] $numbers = 1,2,3

Hvis du forsøger at sætte den forkerte type dataværdi i et stærkt skrevet array, returnerer det en fejlkode.

ArrayList

Som vi har sagt ovenfor, kan det være besværligt at tilføje elementer til arrays., Der er dog en anden type samling – ArrayList – der håndterer dette mere elegant. For at bruge denne type samling skal vi dog påberåbe. Net frame .ork, som kan kaste nogle uheldige udgange på vores måde.

for At oprette en ArrayList, og derefter tilføje elementer til det, skal du køre følgende:

 $myarray = ::new() $myArray.Add('Value')

Her, vi kan bruge standard .Net constructor til at skabe et nyt ArrayList, og derefter anvende -Tilføj operatør for at tilføje produkter til det. Operatøren er der, fordi nogle gange disse kommandoer smide mærkelige udgange, der kan rode med koden.,

går videre

disse er de mest almindelige array typer i Po .ershell, men der er et par andre. Hvis du udvikler dig som Po .ershell-bruger, er det nyttigt at begynde at bruge arraylister i stedet for lige arrays, men du skal også være opmærksom på, at denne type array ikke bruges af avancerede brugere.

i stedet bruger de fleste erfarne kodere en generisk listetype kaldet liste. Denne type liste er lidt mere kompleks at bruge, fordi den er afledt direkte fra C#, men når du først har mestret den, giver den langt mere fleksibilitet end de arrays, vi har diskuteret indtil videre.,

avancerede Array-funktioner

ud over den grundlæggende funktionalitet, vi har dækket indtil videre, er der også en række mere avancerede array-funktioner og nogle ekstra funktioner at bemærke, når du begynder at bruge dem oftere.

Pre-si .ed Arrays

den almindelige måde at oprette arrays på ovenfor vil oprette et array med en størrelse bestemt af antallet af elementer i det. Du kan dog oprette en Matri.af en bestemt størrelse ved at bruge den nye($si .e) konstruktør.

Du kan gøre det på denne måde:

 $data = ]::new(4)

Hvis du kører en .,tæl forespørgsel på dette array, det vender tilbage “4”, fordi selvom det ikke har data i det, vil det fylde rummet med 0. Dette er faktisk yderst nyttigt, hvis du har brug for at initialisere en ny Matri., der er fyldt med nuller, fordi en pre-si .ed array oprindeligt vil blive fyldt med 0.

multiplikation af Arrays

multiplikation af objekter i et array – og især strenge – er noget, der forvirrer de fleste mennesker, når de først skal gøre det., Vi har set ekstremt komplicerede hvis () scripts for at opnå dette resultat, men der er en meget enklere måde:

 PS> $data = @('red','green','blue') PS> $data * 3

Yep, det er rigtigt. Dette vil skabe en ny Matri.med hver værdi gentages tre gange. Du kan også bruge denne kommando som en alternativ måde at udfylde et array med nuller (eller en hvilken som helst anden standardværdi) ved at oprette et array med din valgte værdi og derefter multiplicere det så mange gange du vil.

indlejrede Arrays

som mange andre programmeringssprog understøtter Po .ershell indlejrede arrays., Den almindelige måde at gøre dette i Po .ershell er at bruge et multidimensionelt array. Det enkleste eksempel på dette er at oprette et todimensionelt array:

 $data = @(@(1,2,3),@(4,5,6),@(7,8,9)) $data2 = @( @(1,2,3), @(4,5,6), @(7,8,9) )

den datastruktur, du opretter med denne kommando, er en klassisk Matri., og den kan arbejdes med som dem i andre programmeringssprog. For eksempel, for at få adgang til en bestemt værdi fra denne Matri., skal du angive to dimensioner.,for at få adgang til værdien “3”bruger vi dette:

 PS> $outside = 0 PS> $inside = 2 PS> $data 3

denne kommando kan derefter bruges til at få adgang til enhver værdi, men du skal tilføje indlejrede parenteser for at komme ind i hvert niveau af Matri .en.

et sidste ord

alle instruktionerne ovenfor kan være meget for brugere, der først kommer til Po .ershell, men de er blevet omhyggeligt valgt som en måde at lære sproget på. Ved at kombinere de forskellige teknikker kan du bygge kraftfulde scripts til at automatisere mange af de hyppigste – og mest tidskrævende – arbejde, du gør med Po .ershell.,

disse færdigheder vil også hjælpe dig med at gå ud over Po .ershell. Mange af de mest almindelige sprog, der bruges til styring af cybersikkerhed, som NetCat og Nmap, bruger mange af de samme principper, som Po .ershell gør. Og så bruger Po .ershell til at forbedre din cybersikkerhed er en fantastisk måde at lære at sikre dine systemer mere generelt.