Powershell – Part 4 – Arrays and For Loops

X

Privacy & Cookies

This site uses cookies. By continuing, you agree to their use. Learn more, including how to control cookies.

Got It!

Advertisements

Arrays

For those that have never worked with arrays here’s a great way to understand them: If a variable is a piece of paper then the stack of papers is an array. It’s a list of variables or objects, and every programming/scripting language has ways to store these variables or objects linearly so you can access them later via a number of different methods.

So let’s look at how we can create an array of string objects in powershell:

$array = @("test1", "test2", "test3")$array

You can also add an element to the end of an array:

$array = @("test1", "test2", "test3")$array += "test4"$array

Du kan också lägga ihop arrayer:

$array = @("test1", "test2", "test3")$array2 = @("test4", "test5")$array = $array + $array2$array

Du kan få tillgång till ett element i en array om du känner till indexnumret för det element du vill ha. Arrayer indexeras med heltal som börjar med 0. Detta kan ses med följande kod:

$array = @("test1", "test2", "test3")"First array value: " + $array"Second array value: " + $array"Third array value: " + $array

Du kan använda det elementet som om det vore en vanlig variabel vid det här laget. Eftersom vår array är en array av strängar kan vi använda strängfunktioner som om detta var en vanlig variabel som ställts in på det strängvärdet när vi anropar elementet i denna array. t.ex.:

$array = @("test1", "test2", "test3")$array.ToUpper()

For-slingor

Arrayer kan också nås linjärt med hjälp av for-slingor. En for-slinga har i allmänhet 3 bitar information i sin deklaration:

  1. Initialisering
  2. Bestånd för att fortsätta slingan
  3. En upprepad händelse – Detta används i allmänhet för att föra din slinga närmare att inte uppfylla villkoret för dig slinga så att slingan så småningom kommer att avslutas.

Det här syns bäst genom att titta på en enkel slinga. Följande kommer att initieras genom att $i sätts till 1. Den kommer sedan att testa att $i är mindre än 6 och öka $i med en vid varje genomgång av slingan:

for ($i=1;$i -lt 6; $i++) {"This is line number " + $i}

I exemplet ovan använder vi jämförelseoperatorn -lt för att testa att värdet på $i är mindre än 6. Det finns många andra jämförelseoperatörer som -gt (större än), -le (mindre än eller lika med), -ge (större än eller lika med), -eq (lika) och -ne (inte lika). Om du vill lära dig mer om de jämförelseoperatörer som finns tillgängliga kan du använda följande kommando:

help about_comparison_operators

För slingor med matriser

Det är lätt att se hur du kan tillämpa en slinga på en matris för att iterera genom varje element i matrisen i tur och ordning, om det bara fanns ett sätt att testa hur många element som finns i matrisen. Vi kan göra detta genom att använda en medlem i arrayobjektet som heter Length. Det du bör notera här är att du vill initialisera din indexvariabel med 0 eftersom det är det första elementet i din array, men du vill testa att ditt index är mindre än arrayens längd eftersom det sista elementet i arrayen kommer att vara ett mindre än antalet element i arrayen. Här är processen i praktiken:

$array = @("test1", "test2", "test3")for ($i=0; $i -lt $array.length; $i++) {$array}

Ett ännu snabbare sätt att göra en for-slinga är att använda en speciell foreach-slinga. Med foreach-slingan sätts en variabel till varje objekt i en lista med en mycket enklare konstruktion:

$array = @("test1", "test2", "test3")foreach ($element in $array) {$element}

Den sista saken att notera med foreach-slingan är att den kan nås via pipeline. Den foreach som används i pipeline är faktiskt ett alias till ForEach-Object. Att använda pipeline på detta sätt är ett snabbare sätt att skriva en foreach, men det kan medföra en viss overhead när man hanterar stora datamängder. När du använder foreach via pipeline får du en särskild variabel som representerar elementet i ditt kodblock, $_:

$array = ("test1", "test2", "test3")$array |foreach {$_}

Vi har redan sett foreach-slingan i aktion i pipeline under del 2 av den här serien när vi tittade på hur man läser filer. Här är ett utdrag ur den koden så att du kan se hur en cmdlet kan skicka en lista genom en foreach-slinga:

Get-Content dictionary.txt | foreach {$_.toupper()}

Listor och matriser är mycket viktiga för programmering och skript. Det finns sällan ett skript som inte använder en array eller en lista i någon form. Armed with this knowledge you can start looping away. We’ll be touching on regular expressions in the next tutorial. Until next time…

Advertisements

Lämna en kommentar