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

Si possono anche aggiungere array insieme:

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

È possibile accedere ad un elemento di un array se si conosce il numero di indice dell’elemento desiderato. Gli array sono indicizzati da numeri interi che iniziano con 0. Questo può essere visto con il seguente codice:

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

A questo punto potete usare quell’elemento come se fosse una normale variabile. Dato che il nostro array è un array di stringhe, possiamo usare le funzioni di stringa come se fosse una variabile regolare impostata su quel valore di stringa quando chiamiamo l’elemento di questo array. es:

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

For Loops

Si può accedere agli array anche in modo lineare attraverso l’aiuto di for loop. Un ciclo for ha generalmente 3 bit di informazioni nella sua dichiarazione:

  1. Inizializzazione
  2. Condizione per continuare il ciclo
  3. Una ripetizione – Questo è generalmente usato per portare il vostro ciclo più vicino a non soddisfare la condizione per il vostro ciclo in modo che il ciclo finisca.

Questo è meglio visto guardando un semplice ciclo. Il seguente inizializzerà impostando $i a 1. Verificherà poi che $i sia inferiore a 6 e aumenterà $i di uno ad ogni passaggio del ciclo:

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

Nell’esempio precedente usiamo l’operatore di confronto -lt per verificare che il valore di $i sia inferiore a 6. Ci sono molti altri operatori di confronto disponibili come -gt (maggiore di), -le (minore o uguale a), -ge (maggiore o uguale a), -eq (uguale), e -ne (non uguale). Per conoscere gli operatori di confronto disponibili potete usare il seguente comando:

help about_comparison_operators

For Loops with Arrays

È facile vedere come potete applicare un ciclo ad un array per iterare attraverso ogni elemento dell’array in ordine, se solo ci fosse un modo per verificare quanti elementi sono nell’array. Possiamo farlo usando un membro dell’oggetto array chiamato Length. La cosa da notare qui è che volete inizializzare la vostra variabile index con 0 dato che è il primo elemento del vostro array, ma volete testare che il vostro indice sia inferiore alla lunghezza dell’array dato che l’ultimo elemento dell’array sarà uno in meno del numero di elementi nell’array. Ecco il processo in pratica:

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

Un modo ancora più veloce per fare un ciclo for è usare un ciclo foreach speciale. Il ciclo foreach imposterà una variabile per ogni elemento di una lista con un costrutto molto più semplice:

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

L’ultima cosa da notare con il ciclo foreach è che si può accedere tramite la pipeline. Il foreach usato nella pipeline è in realtà un alias di ForEach-Object. Usare la pipeline in questo modo è un modo più veloce per scrivere un foreach, ma può incorrere in un certo overhead quando si ha a che fare con grandi insiemi di dati. Quando si usa foreach attraverso la pipeline viene data una variabile speciale per rappresentare l’elemento nel blocco di codice, $_:

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

Abbiamo già visto il ciclo foreach in azione nella pipeline durante la Parte 2 di questa serie quando abbiamo visto come leggere i file. Ecco uno snippit di quel codice in modo da poter vedere come un cmdlet può passare una lista attraverso un ciclo foreach:

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

Liste e array sono molto importanti per la programmazione e lo scripting. Raramente c’è uno script che non usi un array o una lista in una forma o nell’altra. Armed with this knowledge you can start looping away. We’ll be touching on regular expressions in the next tutorial. Until next time…

Advertisements

Lascia un commento