Articles

PowerShell Array Guide: Come usare e creare

Gli array sono una caratteristica fondamentale di PowerShell. Gli array consentono di ingerire, manipolare e produrre strutture di dati reali (e non solo stringhe grezze). Questa funzionalità rende PowerShell diverso e più utile rispetto ad altri linguaggi di scripting.

In questo articolo, spiegheremo quali sono gli array e come usarli in PowerShell. Per prima cosa ti mostreremo come creare array in PowerShell e quindi come utilizzare le funzioni di base per manipolarli., Quindi esamineremo diversi tipi di array ed esploreremo alcune delle caratteristiche più sottili di essi.

Ottieni il video corso gratuito PowerShell e Active Directory Essentials

Lo consiglierei sia agli utenti PowerShell nuovi che avanzati. Costruire uno strumento pubblicitario è una grande esperienza di apprendimento.

Il nostro obiettivo è quello di darvi una buona messa a terra nel lavoro con gli array in PowerShell. Una volta che hai imparato queste basi, si può dare un’occhiata al nostro corso su PowerShell per saperne di più.,

  • Array Fondamenti
  • un Array di Oggetti
  • Operatori Per le Matrici
  • Come Aggiungere i Valori di un Array
  • Tipi di Matrice
  • Avanzate Funzioni di Matrice

PowerShell Array

Array sono una caratteristica comune a quasi tutti i linguaggi di programmazione. Sono una struttura di dati che funge da raccolta di più parti di dati. Quando si lavora con un array, è possibile utilizzare lo stesso comando per eseguire la stessa funzione su ogni elemento all’interno di un array o accedere e manipolare singoli elementi utilizzando un indice.,

Gli array in PowerShell possono contenere uno o più elementi. Un elemento può essere una stringa, un numero intero, un oggetto o anche un altro array e un array può contenere qualsiasi combinazione di questi elementi. Ognuno di questi elementi ha un indice, che inizia sempre (a volte in modo confuso) a 0. Quindi al primo elemento di un array viene dato l’indice 0, il secondo è indicizzato come 1 e così via.,

Gli array PowerShell sono una parte così fondamentale di PowerShell che appaiono in ogni tutorial PowerShell là fuori, e una buona conoscenza di come lavorare con loro è fondamentale per molti aspetti dell’utilizzo di PowerShell, dalla configurazione di Office 365 all’utilizzo di PowerShell per Pentesting.

Un esempio di un array PowerShell

Il modo più semplice per illustrare cosa sia un array per fare un esempio. Facciamo una matrice che rappresenta una ciotola di frutta.,

Ci sono diversi modi per creare array in Powershell, ma il più semplice è eseguire questo comando:

@()

Questo creerà un array vuoto. Un array vuoto non è così utile, tuttavia, quindi aggiungiamo alcuni frutti al nostro nuovo array. Questi saranno rappresentati come stringhe di testo. Per fare ciò, esegui questo comando

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

Questo chiamerà un array “fruit” e aggiungerà tre elementi ad esso., Per vedere che questo ha funzionato, puoi leggere l’array usando questo comando:

PS /Users/yourname> $fruit

Che ora restituirà:

 Apples Oranges Bananas

Come puoi vedere, questo array è un gruppo di singoli pezzi di dati. PowerShell li indicizzerà automaticamente nel modo in cui abbiamo spiegato sopra: “Apple” sarà indicizzato come 0, “Oranges” come 1 e “Bananas” come 2.

Questo esempio potrebbe far sembrare che gli array siano oggetti abbastanza semplici, e in un certo senso lo sono. La loro semplicità, tuttavia, è anche ciò che li rende tali oggetti flessibili e potenti., Nel resto di questa guida, ti daremo un assaggio di cosa puoi fare con gli array.

Array Fundamentals

In questa sezione, vedremo i modi più basilari per creare e lavorare con gli array in PowerShell.

Crea un array

In primo luogo, creeremo un array. Il modo standard per farlo è usare @ (), anche se ci sono altri modi.

Per ora, creiamo un array chiamato “data”. Per fare ciò, esegui:

$data = @()

Questo array è vuoto al momento perché non abbiamo specificato alcun dato per esso., Per verificare quanti elementi ci sono in un array, possiamo usare la funzione count:

$data.count

Che, al momento, restituirà uno 0, perché non ci sono elementi nel nostro array. Per creare un array con alcuni dati in esso, mettiamo questi dati tra parentesi dopo@:

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

Esegui la stessa funzione di conteggio ora, e vedrai che ci sono 4 elementi in questo array. Per vedere di nuovo questi elementi, invochiamo semplicemente l’array:

$data

Che elencherà gli elementi che inseriamo nell’array.,

Accesso agli elementi

Ora abbiamo un array, vorremo accedere agli elementi da esso. Ci sono diversi modi per farlo. Il primo è usare l’indice degli elementi nell’array. Come abbiamo detto prima, gli indici iniziano da 0, quindi per recuperare il primo elemento nel nostro array dovremo dire a PowerShell di guardare l’elemento il cui indice è zero. Lo facciamo eseguendo:

$data

Questo restituirà “zero” perché quella è stata la prima stringa che abbiamo inserito nel nostro array.,

Possiamo anche estendere questa sintassi per restituire più elementi dallo stesso array, semplicemente inserendo più indici nello stesso comando. Ad esempio, esegui:

$data

Questo restituirà “Zero Due Tre”. Gli articoli vengono restituiti nello stesso ordine in cui sono stati inseriti gli indici. È inoltre possibile utilizzare un’ulteriore sintassi per restituire set di elementi da un array. Ad esempio:

$data

Restituirà tutti gli articoli con un indice compreso tra 1 e 3 (incluso)., E:

$data

Restituirà l’ultimo elemento nell’array: il numero negativo dice a PowerShell di contare all’indietro dalla fine dell’array, quindi in questo caso, questo comando restituirà “Tre”, l’ultimo elemento nel nostro array di test.

Modifica degli elementi

Lo stesso metodo può essere utilizzato per aggiornare gli elementi in un array. Ad esempio, per aggiornare l’elemento il cui indice è 2 (ricorda che questo è il terzo elemento nell’array), possiamo eseguire:

$data = 'second'

Questo ci dà accesso diretto agli elementi all’interno di un array.,

Azioni iterate

Una delle caratteristiche più potenti di PowerShell (e, di fatto, di qualsiasi interfaccia a riga di comando) è la possibilità di eseguire la stessa azione su tutti gli elementi di un array. Ci sono diversi modi per farlo.

Il più semplice è usare una Pipeline, che è il carattere |. Quando si passa un array a una pipeline, ogni elemento di un array viene elaborato individualmente. Come abbiamo sottolineato nel nostro articolo su oggetti PowerShell e piping di dati, questo è spesso il modo più semplice per eseguire azioni iterate.,

Ad esempio, per aggiungere una descrizione ad ogni elemento nel nostro array, possiamo usare questo comando:

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

Questo comando dice a PowerShell di prendere gli elementi in data data uno alla volta, e quindi per ognuno di essi aggiungere “Item:” all’inizio, seguito dal valore originale.

Ci sono molti altri modi per eseguire azioni iterate in PowerShell, molti dei quali saranno familiari se hai usato altri linguaggi di programmazione: PowerShell include ForEach loop, For loops e Switch loop. Per ulteriori dettagli su questi, controllare la documentazione di Microsoft.,

Array di oggetti

Finora, abbiamo lavorato con un array che contiene dati di base: una stringa. Tuttavia, gli array possono anche contenere oggetti e molti degli usi più comuni di PowerShell, come la configurazione di Office 365, richiedono che tu sappia come lavorare con gli oggetti. Quindi diamo un’occhiata ad alcuni comandi di base per farlo.

Creazione di un array di oggetti

Possiamo creare un array di oggetti nello stesso modo in cui abbiamo fatto con le stringhe, usando la funzione @ ()., Ad esempio, per creare un elenco di test dei dipendenti, possiamo usare:

La maggior parte dei cmdlet restituirà un array di questo tipo quando si assegna loro una variabile con cui lavorare.

Accesso agli oggetti dagli array

Il processo che abbiamo eseguito sopra per accedere a singoli pezzi di dati può essere utilizzato anche con gli array che contengono oggetti., Ad esempio, eseguendo:

$data

Restituirà:

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

In alternativa, possiamo accedere alle proprietà dei singoli oggetti specificando quale proprietà vorremmo all’interno dello stesso comando, come questo:

$data.FirstName

Che restituirà”Kevin”.

Aggiornare le proprietà degli oggetti in array

Andando oltre, la stessa sintassi ci dà la possibilità di aggiornare le singole proprietà all’interno di oggetti che si trovano in array., Ad esempio:

$data.FirstName = 'Jay'

Aggiornerà la proprietà FirstName nel primo elemento del nostro array a “Jay”.

Accesso a ogni proprietà in una matrice di oggetti

Nella maggior parte dei linguaggi di programmazione, dovremmo usare un processo iterativo (vedi sopra) per accedere a tutte le proprietà in una matrice di oggetti. Possiamo farlo anche in PowerShell, ovviamente, eseguendo:

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

Questo restituirà un elenco di tutte le proprietà LastName nel nostro array, ma è computazionalmente costoso e difficile da scrivere ogni volta che vuoi vedere questi dati., Quindi, invece, PowerShell ha una scorciatoia. Esegui questo:

$data.LastName

E vedrai lo stesso elenco. PowerShell sta effettivamente prendendo ogni oggetto a turno, proprio come prima, ma nasconde questa complessità da noi.

Operatori per array

Quasi tutti gli operatori che usiamo per i singoli elementi di dati in PowerShell funzioneranno anche con gli array, ma alcuni di essi funzionano in modo leggermente diverso se usati in questo modo. Quindi diamo un’occhiata agli operatori più comuni e come puoi usarli negli array.,

-join

L’operatore-join è uno dei comandi più utilizzati in PowerShell, ed è estremamente utile quando si lavora con gli array. Può essere utilizzato iterativamente sugli elementi di un array per unirli insieme nell’output di un array.

Facciamo un esempio. Innanzitutto, crea un semplice array:

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

E quindi usa-join per inserire un trattino tra ogni elemento e produrre il risultato:

$data -join '-'

Che restituirà “1-2-3-4”., L’operatore-join può anche essere utilizzato senza un delimitatore, in cui gli elementi in un array verranno emessi come una serie di valori non separati.

-contains

L’operatore-contains lavora su array in modo molto simile al suo utilizzo con singoli punti dati. Puoi usarlo per verificare se un array contiene una particolare stringa e produrrà un valore booleano. Ad esempio:

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

Uguaglianze

Ci sono due operatori per il controllo dell’uguaglianza in PowerShell:- eq e-ne., Se sei abituato a usarli su singoli valori, tuttavia, il modo in cui questi funzionano in relazione agli array può sembrare un po ‘ strano. Se si utilizza -eq, ad esempio, l’operatore non emetterà un “True” booleano, ma restituirà l’oggetto che corrisponde.

Per esempio:

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

L’operatore-ne funziona più o meno allo stesso modo, tranne che ti darà tutti i valori che non sono uguali al valore specificato., Quindi:

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

È tuttavia possibile utilizzare un’istruzione if() per confrontare l’output di questi operatori con l’output previsto e restituire un output “Vero” o “Falso”.

Come aggiungere valori a un array

Dopo tutte le istruzioni di cui sopra, probabilmente ti starai chiedendo perché abbiamo tralasciato l’aggiunta di elementi di dati a un array. Questo perché non c’è modo di farlo. Un array, una volta creato, rimane la stessa dimensione per sempre, e quindi per renderlo più grande è necessario copiarlo in un nuovo array ed eliminare l’originale.,

Sembra complicato, ma Powershell gestisce questo processo per te usando una serie di operatori piuttosto semplici. Ci sono due modi principali per farlo.

Array Addition

PowerShell può aggiungere due array insieme utilizzando l’operatore”+”, che nasconde la complessità di ciò che il sistema sta effettivamente facendo. Ad esempio, se crei due array di test come questo:

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

Puoi quindi aggiungerli insieme usando solo:

 PS> $first + $second

Questo creerà un nuovo array con tutti e quattro i valori e produrrà i risultati., Si noti, tuttavia, che non darà a questo nuovo array un nuovo nome. Per fare ciò, usiamo l’operatore+=.

Più uguale per combinare gli array

Invece di usare l’operatore “+” nell’esempio precedente, avremmo potuto usare l’operatore”+=”, che ci darà un array completamente nuovo:

 $first += 'Two, Three'

Il comando sembra semplice, ma nasconde ciò che PowerShell sta effettivamente facendo qui. Sta copiando tutti i valori da first first e creando un nuovo array che include i valori aggiuntivi. Quindi elimina l’array originale.,

Questo è un po ‘ problematico perché è computazionalmente costoso. Con piccoli array, si potrebbe non notare, ma con grandi quantità di dati questo metodo può bloccare rapidamente il sistema. Ecco perché ti abbiamo dato un modo per aggirare questo problema, di seguito.

Tipi di array

Finora, abbiamo avuto a che fare con array predefiniti in PowerShell. Anche se PowerShell non ci ha detto al momento, ogni array che abbiamo creato finora è di un tipo, il tipo]. Questo tipo di array può contenere qualsiasi tipo di valore di dati.,

Array fortemente tipizzati

Tuttavia, ci sono momenti in cui si desidera limitare i tipi di dati o oggetti che un array può contenere a uno solo. Possiamo farlo usando un array fortemente tipizzato, che può contenere solo il tipo di dati specificato.

Ad esempio, per creare un array che può assumere solo numeri interi, possiamo usare:

 PS> ] $numbers = 1,2,3

Se provi a inserire il tipo sbagliato di valore di dati in un array fortemente tipizzato, restituirà un codice di errore.

ArrayList

Come abbiamo detto sopra, aggiungere elementi agli array può essere una seccatura., Tuttavia, esiste un diverso tipo di raccolta – ArrayList – che lo gestisce in modo più elegante. Per utilizzare questo tipo di raccolta, tuttavia, dovremo invocare.Net framework, che può generare alcuni sfortunati output sulla nostra strada.

Per creare un ArrayList e quindi aggiungere elementi ad esso, eseguire quanto segue:

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

Qui, possiamo utilizzare il costruttore.Net predefinito per creare un nuovo ArrayList e quindi utilizzare l’operatore-Add per aggiungere elementi ad esso. L’operatore è lì perché a volte questi comandi buttano fuori strane uscite che possono pasticciare con il codice.,

Andando oltre

Questi sono i tipi di array più comuni in PowerShell, ma ce ne sono alcuni altri. Se stai sviluppando come utente PowerShell, è utile iniziare a utilizzare ArrayLists invece di straight array, ma dovresti anche essere consapevole che questo tipo di array non è utilizzato da utenti avanzati.

Invece, i programmatori più esperti useranno un tipo di elenco generico chiamato List. Questo tipo di elenco è un po ‘ più complesso da usare perché deriva direttamente da c#, ma una volta che lo hai padroneggiato, offre molta più flessibilità rispetto agli array di cui abbiamo discusso finora.,

Funzioni di array avanzate

Oltre alle funzionalità di base che abbiamo trattato finora, ci sono anche una serie di funzioni di array più avanzate, e alcune caratteristiche extra da notare, come si inizia a usarli più frequentemente.

Array pre-dimensionati

Il modo standard di creare array sopra creerà un array con una dimensione determinata dal numero di elementi in esso contenuti. Tuttavia, è possibile creare un array di una dimensione specificata utilizzando il costruttore new (size size).

Puoi farlo in questo modo:

 $data = ]::new(4)

Se esegui un .,count query su questo array, restituirà “4”, perché anche se non ha dati in esso, riempirà lo spazio con 0. Questo è in realtà estremamente utile se è necessario inizializzare un nuovo array che è pieno di zeri perché un array pre-dimensionato verrà inizialmente riempito con 0.

Moltiplicare gli array

Moltiplicare gli oggetti in un array – e in particolare le stringhe – è qualcosa che confonde la maggior parte delle persone quando devono farlo per la prima volta., Abbiamo visto script if() estremamente complicati per ottenere questo risultato, ma c’è un modo molto più semplice:

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

Sì, è vero. Questo creerà un nuovo array con ogni valore ripetuto tre volte. Puoi anche usare questo comando come un modo alternativo per riempire un array con zeri (o qualsiasi altro valore predefinito) creando un array con il valore scelto e quindi moltiplicandolo quante volte vuoi.

Array nidificati

Come molti altri linguaggi di programmazione, PowerShell supporta array nidificati., Il modo standard per farlo in PowerShell è utilizzare un array multidimensionale. L’esempio più semplice di questo è quello di creare un array bidimensionale:

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

La struttura dati che stai creando con questo comando è una matrice classica, e può essere lavorata come quelle in altri linguaggi di programmazione. Ad esempio, per accedere a un particolare valore da questo array, è necessario specificare due dimensioni.,

Ad esempio, per accedere al valore “3”, useremmo questo:

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

Questo comando può quindi essere usato per accedere a qualsiasi valore, ma è necessario aggiungere parentesi nidificate per entrare in ogni livello della matrice.

Un’ultima parola

Tutte le istruzioni di cui sopra potrebbero essere molte per gli utenti che stanno arrivando per la prima volta su PowerShell, ma sono state scelte con cura come modo per imparare la lingua. Combinando le varie tecniche, è possibile creare script potenti per automatizzare molti dei lavori più frequenti – e più dispendiosi in termini di tempo – che si fanno con PowerShell.,

Queste abilità ti aiuteranno anche ad andare oltre PowerShell. Molti dei linguaggi più comuni utilizzati per la gestione della sicurezza informatica, come NetCat e Nmap, utilizzano molti degli stessi principi di PowerShell. E così utilizzando PowerShell per migliorare la vostra sicurezza informatica è un ottimo modo per imparare a proteggere i sistemi più in generale.