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

Możesz również dodawać tablice razem:

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

Możesz uzyskać dostęp do elementu tablicy, jeśli znasz numer indeksu elementu, który chcesz. Tablice są indeksowane liczbami całkowitymi zaczynającymi się od 0. Można to zobaczyć w następującym kodzie:

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

W tym momencie możesz użyć tego elementu tak, jakby był zwykłą zmienną. Ponieważ nasza tablica jest tablicą łańcuchów, możemy używać funkcji łańcuchowych tak, jakby to była zwykła zmienna ustawiona na tę wartość łańcuchową, gdy wywołujemy element tej tablicy. np.:

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

Pętle for

Do tablic można również uzyskać dostęp liniowo za pomocą pętli for. Pętla for generalnie posiada 3 informacje w swojej deklaracji:

  1. Inicjalizacja
  2. Warunek kontynuowania pętli
  3. Powtarzające się wystąpienie – Jest to generalnie używane do przybliżenia pętli do niespełnienia warunku dla pętli, tak aby pętla w końcu się zakończyła.

Najlepiej widać to patrząc na prostą pętlę. Poniższa pętla inicjalizuje się ustawiając $i na 1. Następnie testuje czy $i jest mniejsze niż 6 i zwiększa $i o jeden przy każdym przejściu pętli:

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

W powyższym przykładzie używamy operatora porównania -lt aby sprawdzić czy wartość $i jest mniejsza niż 6. Istnieje wiele innych operatorów porównania, takich jak -gt (większy niż), -le (mniejszy lub równy), -ge (większy lub równy), -eq (równy) i -ne (nie równy). Aby poznać dostępne operatory porównania, można użyć następującego polecenia:

help about_comparison_operators

Dla pętli z tablicami

Łatwo zauważyć, jak można zastosować pętlę do tablicy, aby iterować po każdym elemencie tablicy w kolejności, jeśli tylko istniałby sposób na sprawdzenie, ile elementów jest w tablicy. Możemy to zrobić za pomocą członka obiektu tablicy o nazwie Length. Rzeczą do zauważenia jest to, że chcesz zainicjalizować zmienną index z 0, ponieważ jest to pierwszy element w twojej tablicy, ale chcesz przetestować, że twój index jest mniejszy niż długość tablicy, ponieważ ostatni element tablicy będzie o jeden mniej niż liczba elementów w tablicy. Oto proces w praktyce:

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

Jeszcze szybszym sposobem na wykonanie pętli for jest użycie specjalnej pętli foreach. Pętla foreach ustawi zmienną na każdy element listy przy znacznie prostszej konstrukcji:

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

Ostatnią rzeczą, na którą należy zwrócić uwagę w przypadku pętli foreach, jest to, że można uzyskać do niej dostęp za pośrednictwem rurociągu. Foreach, który jest używany w rurociągu, jest w rzeczywistości aliasem do ForEach-Object. Użycie rurociągu w ten sposób jest szybszym sposobem na napisanie pętli foreach, ale może powodować pewne koszty ogólne, gdy mamy do czynienia z dużymi zestawami danych. Kiedy używasz foreach poprzez rurociąg, otrzymujesz specjalną zmienną do reprezentowania elementu w twoim bloku kodu, $_:

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

Widzieliśmy już pętlę foreach w akcji w rurociągu podczas części 2 tej serii, kiedy patrzyliśmy na to, jak czytać pliki. Oto wycinek tego kodu, abyś mógł zobaczyć, jak cmdlet może przekazać listę przez pętlę foreach:

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

Listy i tablice są bardzo ważne w programowaniu i tworzeniu skryptów. Rzadko zdarza się skrypt, który nie używa tablicy lub listy w takiej czy innej formie. Armed with this knowledge you can start looping away. We’ll be touching on regular expressions in the next tutorial. Until next time…

Advertisements

Dodaj komentarz