Articles

PowerShell Utvalg Guide: Hvordan å Bruke og Skape

Matriser er en grunnleggende funksjon i PowerShell. Systemene gjør det mulig å innta, manipulere og utgang sant datastrukturer (og ikke bare rått strenger). Denne evnen gjør PowerShell andre og mer nyttige enn andre scripting språk.

I denne artikkelen, vi vil forklare hva matriser er, og hvordan du bruker dem i PowerShell. Vi vil først vise deg hvordan å lage arrays i PowerShell, og deretter hvordan å bruke grunnleggende funksjoner for å manipulere dem., Deretter vil vi se på flere ulike typer matriser, og utforske noen av de mer subtile har av dem.

Få Gratis PowerShell-og Active Directory-Essentials Video Kurs

jeg vil anbefale dette for både nye og avanserte PowerShell-brukere. Å bygge en ANNONSE verktøyet er en flott erfaring.

Vårt mål er å gi deg en god innføring i arbeid med matriser i PowerShell. Når du har mestret disse grunnleggende, kan du ta en titt på våre kurs på PowerShell til å lære mer.,

  • Array Grunnleggende
  • Tabeller av Objekter
  • Operatører For Matriser
  • Hvordan å Legge Verdier til en Matrise
  • Array Typer
  • Avanserte Array Funksjoner

PowerShell-Matriser

Matriser er en vanlig funksjon av nesten alle programmeringsspråk. De er en datastruktur som fungerer som en samling av flere biter av data. Når du arbeider med en tabell, kan du enten bruke samme kommando for å utføre samme funksjon på hvert element i en matrise, eller få tilgang til og manipulere individuelle elementer ved hjelp av en indeks.,

Matriser i PowerShell kan inneholde ett eller flere elementer. Et element kan være en streng, et heltall, et objekt, eller til og med en annen matrise, og en array som kan inneholde en hvilken som helst kombinasjon av disse elementene. Hvert av disse elementene har en indeks, som alltid starter (noen ganger til forveksling) på 0. Så den første element i en matrise er gitt indeks 0, den andre er indeksert som 1, og så videre.,

PowerShell-matriser er en så fundamental del av PowerShell at de vises på hver PowerShell opplæringen ut der, og en god kunnskap om hvordan du arbeider med dem er kritisk for mange aspekter ved bruk av PowerShell, fra å konfigurere Office 365 til å bruke PowerShell for Pentesting.

Et Eksempel på en PowerShell Array

Den enkleste måten å illustrere hva en matrise er å ta et eksempel. La oss gjøre et utvalg som representerer en skål med frukt.,

Det er flere måter å lage arrays i Powershell, men det enkleste er å kjøre denne kommandoen:

@()

Dette vil opprette en tom tabell. En tom matrise er ikke så nyttig, men så la oss legge til litt frukt til våre nye tabellen. Disse vil bli representert som tekst-strenger. For å gjøre det, kjøre denne kommandoen

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

Dette vil nevne en array «frukt», og legg til tre elementene til det., Å se at dette har fungert, kan du lese tabellen ved hjelp av denne kommandoen:

PS /Users/yourname> $fruit

Som vil nå returnere:

 Apples Oranges Bananas

Som du kan se, denne matrisen er en gruppe av individuelle biter av data. PowerShell vil automatisk indeksere dem på den måten vi har beskrevet ovenfor: «Apple» vil bli indeksert til 0, «Appelsiner» som 1, og «Bananer» som 2.

Dette eksempelet kan gjøre det virke som matriser er ganske enkle gjenstander, og på en måte som de er. Sin enkelhet, men er også det som gjør dem så fleksibel, kraftig objekter., I resten av denne håndboken, vil vi gi deg en smak av hva du kan gjøre med matriser.

Array Grunnleggende

I denne delen skal vi se på de mest grunnleggende metoder for å opprette og arbeide med matriser i PowerShell.

Opprette en Matrise

Først, vi oppretter en array. Den vanlige måten å gjøre dette på er å bruke @(), selv om det er andre måter.

For nå, la oss lage en array kalt «data». For å gjøre dette, kjører du:

$data = @()

Denne tabellen er tom for øyeblikket, fordi vi ikke har spesifisert noen data for det., For å sjekke hvor mange elementer er i en matrise, kan vi bruke count funksjon:

$data.count

Som i øyeblikket, vil returnere en 0, fordi det er ingen elementer i vårt utvalg. For å gjøre en matrise med noen data i det, kan vi sette disse tallene i parentes etter@ -:

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

Kjør den samme teller funksjonen nå, og du vil se at det er 4 elementer i denne tabellen. For å se disse elementene igjen, vi bare påberope utvalg:

$data

Som vil liste elementene vi legger i tabellen.,

få Tilgang til Elementer

Nå har vi en matrise, vil vi ønske å få tilgang til elementer fra den. Det er flere måter å gjøre dette på. Den første er å bruke indeksen av elementene i matrisen. Som vi sa før, indekser starter på 0, så å hente det første elementet i vårt utvalg, vi trenger å fortelle PowerShell til å se på elementet med indeks lik null. Vi gjør dette ved å kjøre:

$data

Dette vil tilbake «null», fordi det var den første strengen vi legger i vårt utvalg.,

Vi kan også utvide denne syntaksen for å gå tilbake flere elementer på samme rekke, bare ved å sette flere indekser i den samme kommandoen. For eksempel, kjører du:

$data

Dette vil tilbake «Zero To Three». Varene er returnert i samme rekkefølge som du har angitt indekser. Du kan også bruke ytterligere syntaks for å gå tilbake sett med elementer fra en matrise. For eksempel:

$data

Vil returnere alle elementene med en indeks på mellom 1 og 3 (inkluderende)., Og:

$data

Vil returnere det siste elementet i tabellen: den negative tall forteller PowerShell til å telle bakover fra slutten av tabellen, så i dette tilfellet, er denne kommandoen vil tilbake «Tre», det siste elementet i vår test-matrise.

Endre Elementer

Den samme metoden kan brukes til å oppdatere elementer i en matrise. For eksempel, for å oppdatere elementet med indeks 2 (husk at dette er det tredje elementet i tabellen), kan vi kjøre:

$data = 'second'

Dette gir oss direkte tilgang til elementene i en matrise.,

Iterated Handlinger

En av de kraftigste funksjonene i PowerShell (og, faktisk, av alle kommandolinje-grensesnitt) er evnen til å utføre den samme handlingen på alle elementene i en array. Det finnes en rekke forskjellige måter å gjøre dette på.

Den mest grunnleggende er å bruke en Rørledning, som er tegnet |. Når du passerer en matrise til en rørledning, hvert element i en matrise er behandlet individuelt. Som vi har påpekt i vår artikkel om PowerShell objekter og data piping, dette er ofte den enkleste måten å utføre iterated handlinger.,

For eksempel, for å legge til en beskrivelse til hvert element i vårt utvalg, kan vi bruke denne kommandoen:

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

Denne kommandoen forteller PowerShell til å ta elementer i $data, ett om gangen, og deretter for hver av dem, legg til «Artikkel:» i begynnelsen, etterfulgt av den opprinnelige verdien.

Det er flere andre måter å utføre iterated handlinger i PowerShell, som mange vil være kjent hvis du har brukt andre programmeringsspråk: PowerShell inneholder ForEach looper, For sløyfer, og Slå looper. For flere detaljer om disse, sjekk Microsoft-dokumentasjonen.,

– Tabeller av Objekter

Så langt har vi arbeidet med en matrise som inneholder grunnleggende data: en string. Imidlertid, arrays kan også inneholde objekter, og mange av de mest vanlige bruker av PowerShell – som konfigurere Office 365 – krever at du vet hvordan du skal arbeide med objekter. Så la oss se på noen grunnleggende kommandoer for å gjøre det.

Opprette en Array av Objekter

Vi kan lage en array av objekter på samme måte som vi gjorde med strenger med @ () – funksjonen., For eksempel, for å gjøre en test av ansatte, kan vi bruke:

de Fleste cmdlets vil returnere et array av denne typen når du tildele dem en variabel til å jobbe med.

få Tilgang til Objekter fra Matriser

Den prosessen vi gikk gjennom ovenfor for å få tilgang til enkelte deler av data kan like brukes med matriser som inneholder objekter., For eksempel, kjører:

$data

Vil tilbake:

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

Alternativt kan vi få tilgang til egenskapene til de individuelle objekter ved å angi hvilke eiendommer vi vil gjerne innenfor samme kommando, som dette:

$data.FirstName

Som vil tilbake «Kevin».

Oppdatering av Objekt Egenskaper i Matriser

Gå videre, den samme syntaks gir oss mulighet til å oppdatere individuelle egenskaper innen objekter som er holdt i arrays., For eksempel:

$data.FirstName = 'Jay'

Vil oppdatere Fornavn eiendom i det første elementet i vårt utvalg for å «Jay».

få Tilgang til Hver Eiendom i et Array av Objekter

I de fleste programmeringsspråk, vi ville ha til å bruke en iterativ prosess (se over) for å få tilgang til alle eiendommer i en array av objekter. Vi kan gjøre det i PowerShell, samt, selvfølgelig, ved å kjøre:

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

Dette vil returnere en liste av alle Etternavn egenskaper i vårt utvalg, men det er i beregninger dyrt og vanskelig å skrive hver gang du ønsker å se denne informasjonen., Så i stedet, PowerShell har en snarvei. Kjør dette:

$data.LastName

Og du vil se den samme listen. PowerShell er faktisk tar hvert objekt i sin tur, akkurat som før, men det skjuler denne kompleksiteten fra oss.

– Operatører For Matriser

Nesten alle operatører som vi bruker for individuelle dataelementer i PowerShell vil også arbeide med matriser, men noen av dem fungerer litt annerledes når det brukes på denne måten. Så la oss ta en titt på de mest vanlige operatører, og hvordan du kan bruke dem i rekker.,

-bli med

– bli med operatøren er en av de mest brukte kommandoer i PowerShell, og det er svært nyttig når du arbeider med matriser. Det kan brukes iterativt på elementene i en array til å bli med dem sammen i produksjonen av en matrise.

La oss ta et eksempel. Først oppretter du en enkel matrise:

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

Og deretter bruke -bli med å sette inn en bindestrek i mellom hvert element, og utgang resultat:

$data -join '-'

Som vil tilbake «1-2-3-4»., Det -bli med operatøren kan også brukes uten skilletegn, som kan elementene i en matrise vil bli generert som en serie av unseparated verdier.

-inneholder

– inneholder operator fungerer på rekker på en lignende måte til sin bruk med enkel data poeng. Du kan bruke den til å sjekke hvis en tabell inneholder en særlig streng, og det vil generere en Boolsk verdi. For eksempel:

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

Likheter

Det er to operatører for å sjekke for likestilling i PowerShell: -eq-og -ne., Hvis du er vant til å bruke disse på enkelt-verdier, selv om, slik at disse virker i forhold til arrays kan virke litt merkelig. Hvis du bruker -eq, for eksempel operatøren vil ikke sende en Boolsk «Sann», men i stedet, vil returnere objektet som matcher.

For eksempel:

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

Den -ne operatør fungerer mye på samme måte, bortsett fra at det vil gi deg alle verdier som ikke er lik den angitte verdien., Slik:

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

Du kan imidlertid bruke en if() uttalelse for å sammenligne resultatet av disse operatørene med forventet utgang, og returnerer «True» eller «False» utgang.

Hvordan å Legge Verdier til en Matrise

Når alle instruksjonene ovenfor, du er sikkert lurer på hvorfor vi har utelatt å legge til data elementer til en matrise. Det er fordi det er ingen måte å gjøre det på. En rekke, når du har opprettet, forblir de samme størrelse for alltid, og så for å gjøre det større du trenger å kopiere den til en ny tabell, og slette den opprinnelige.,

Det høres komplisert ut, men Powershell håndterer denne prosessen for deg ved hjelp av en serie av ganske enkle operatører. Det er i hovedsak to måter å gjøre dette på.

Array Tillegg

PowerShell kan legge til to systemene sammen ved å bruke » + » – operatoren, som skjuler kompleksiteten av hva systemet faktisk gjør. For eksempel, hvis du gjør to test-matriser som dette:

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

Du kan deretter legge dem sammen ved hjelp av bare:

 PS> $first + $second

Dette vil gjøre en ny array med alle fire verdier, og utgang resultatene., Vær imidlertid oppmerksom på at det vil ikke gi dette new array et nytt navn. For å gjøre det, vi bruker += operatør.

Pluss er Lik for å Kombinere Matriser

i Stedet for å bruke » + «- operatoren i ovennevnte eksempel, kunne vi ha brukt den » + » = » operatør, noe som vil gi oss et helt nytt utvalg:

 $first += 'Two, Three'

– kommandoen ser enkelt ut, men det er å skjule hva PowerShell er faktisk å gjøre det her. Det er kopiere alle verdier fra $først, og gjør en ny matrise som inneholder ekstra verdier. Det deretter slettes den opprinnelige matrisen.,

Dette er litt problematisk fordi det er i beregninger dyrt. Med små matriser, vil du kanskje ikke merke, men med store datamengder denne metoden kan raskt låse opp systemet. Det er derfor vi har gitt deg en vei rundt dette problemet, nedenfor.

Array Typer

Så langt, vi har hatt befatning med standard matriser i PowerShell. Selv om PowerShell ikke fortelle oss på den tiden, hver matrise som vi har laget så langt er av en type ] type. Denne type array kan holde alle typer data verdi.,

Sterkt Skrevet Matriser

Men det er tider når du ønsker å begrense hvilke typer data eller objekter i en matrise kan holde deg til bare ett. Vi kan gjøre dette ved å bruke et sterkt skrevet array, som bare inneholder den angitte data type.

For eksempel, for å gjøre en array som kan bare ta heltall, kan vi bruke:

 PS> ] $numbers = 1,2,3

Hvis du prøver og sette feil type data verdi i et sterkt skrevet utvalg, det vil returnere en feilkode.

ArrayList

Som vi har sagt ovenfor, legger til elementer i matriser kan være et problem., Men det er en annen type samling – ArrayList – som håndterer dette mer elegant. For å bruke denne type samling, men vi er nødt til å påberope seg .Net framework, som kan kaste noen uheldige utganger i vår vei.

for Å lage en ArrayList, og deretter legge til elementer i det, kjører du følgende:

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

Her kan vi bruke standard .Net-konstruktør for å opprette en ny ArrayList, og deretter bruke -Legg til operatøren for å legge til elementer på den. Operatøren er det fordi noen ganger er disse kommandoene kaste ut merkelige utganger som kan rote med koden.,

Gå Videre

Disse er de mest vanlige array typer i PowerShell, men det er et par andre. Hvis du er utvikler som en PowerShell bruker, er det nyttig å starte med ArrayLists i stedet for rett matriser, men du bør også være klar over at denne type utvalg er ikke brukt av avanserte brukere.

i Stedet, mest erfarne programmerere vil bruke en generisk liste typen kalles Listen. Denne type listen er litt mer komplisert å bruke fordi det er hentet rett fra C#, men når du mestrer det, er det byr på langt mer fleksibilitet enn de tilbudene vi har diskutert så langt.,

Avanserte Array Funksjoner

I tillegg til den grunnleggende funksjonaliteten vi har dekket så langt, det er også en rekke mer avanserte array funksjoner, og noen ekstra funksjoner for å merke, som du begynner å bruke dem oftere.

Pre-Størrelse Tabeller

standard måte å skape matrisene ovenfor vil opprette en matrise med en størrelse bestemmes av antall elementer i det. Du kan imidlertid opprette en matrise av en spesifisert størrelse ved hjelp av det nye($size) konstruktør.

Du kan gjøre det slik:

 $data = ]::new(4)

Hvis du kjører en .,teller spørring på denne matrisen, det vil tilbake «4», fordi selv om det ikke har data i det, det vil fylle rommet med 0. Dette er faktisk svært nyttig hvis du trenger for å starte en ny matrise som er fylt med nuller fordi en pre-størrelse utvalg vil i første omgang bli fylt med 0.

Multiplisere Matriser

å Multiplisere objekter i en matrise, og spesielt strenger – er noe som forvirrer folk flest når de først nødt til å gjøre det., Vi har sett ekstremt komplisert hvis () – skript for å oppnå dette resultatet, men det er en mye enklere måte:

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

Jepp, det er riktig. Dette vil opprette en ny tabell der hver verdi gjentatt tre ganger. Du kan også bruke denne kommandoen som en alternativ måte å fylle en matrise med nuller (eller andre standard verdi) ved å lage en matrise med den valgte verdien, og deretter å multiplisere det så mange ganger du vil.

Nestede Tabeller

Som mange andre programmeringsspråk, PowerShell støtter nestede tabeller., Den vanlige måten å gjøre dette på i PowerShell er å bruke en multi-dimensjonal array. Det enkleste eksemplet på dette er å skape et to-dimensjonalt array:

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

data-struktur du gjør med denne kommandoen er en klassisk matrise, og det kan være jobbet med, som de i andre programmeringsspråk. For eksempel, for å få tilgang til en bestemt verdi fra denne tabellen, vil du trenger å angi to dimensjoner.,

For eksempel, for å få tilgang til verdien «3», ville vi bruke dette:

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

Denne kommandoen kan brukes til å få tilgang til hvilken som helst verdi, men du trenger å legge til nestede braketter til å komme på innsiden av hvert nivå av matrisen.

En Siste Ordet

Alle av de ovennevnte instruksjonene kan være mye for brukere som er de første som kommer til PowerShell, men de har blitt nøye utvalgt som en måte å lære språket. Ved å kombinere ulike teknikker, kan du bygge kraftige skript for å automatisere mange av de mest hyppig og mest tidkrevende – arbeidet du gjør med PowerShell.,

Disse ferdighetene vil også hjelpe deg til å gå utover PowerShell. Mange av de vanligste språkene som brukes for å administrere cybersecurity, som NetCat og Nmap, bruker mange av de samme prinsippene som PowerShell gjør. Og så bruke PowerShell for å forbedre din cybersecurity er en flott måte å lære hvordan du kan sikre dine systemer mer generelt.