Magic Quadrant™ per la gestione degli accessi privilegiati 2025: Netwrix riconosciuta per il quarto anno consecutivo. Scarica il report.

Piattaforma
Centro risorseBlog
Come utilizzare gli array di Powershell

Come utilizzare gli array di Powershell

Oct 24, 2023

Introduzione

Un array è una struttura di dati che può contenere più di un valore alla volta. Pensalo come una raccolta o un elenco di elementi dello stesso tipo o di tipi diversi. Gli array sono utilizzati in molti linguaggi di scripting e di programmazione, incluso Windows PowerShell.

Scopriamo come creare e utilizzare un array in PowerShell.

Creazione di un array di oggetti

Per impostazione predefinita, ogni elemento in un array è un oggetto, piuttosto che un altro tipo di dato come stringa o intero. Ecco un esempio di come creare un array di oggetti aggiungendo esplicitamente degli oggetti:

      $people = @(

    [PSCustomObject]@{Name='Alice'; Age=30},

    [PSCustomObject]@{Name='Bob'; Age=25}
      

Creare un Array con un Solo Elemento

Se si assegna un solo valore a una variabile, allora PowerShell non creerà un array. Per confermare ciò, usiamo due script e visualizziamo i loro tipi di dati.

Prima, creeremo un array in PowerShell con cinque elementi:

      $array = @(1, 2, 3, 4, 5)

$array1.GetType()
      

Ora proviamo a usare uno script simile per creare un array con un solo elemento:

      $array1 = 1

$array1.GetType()
      

Come puoi vedere dall'output qui sotto, PowerShell ha creato un array (System.Array) per il primo script di esempio ma non per il secondo.

Image

Questo comportamento è particolarmente preoccupante se si desidera creare un array recuperando oggetti eseguendo un comando specifico, poiché non si sa in anticipo quanti oggetti verranno restituiti nei risultati.

Per aggirare questo problema, puoi utilizzare l'operatore , (virgola). Se una virgola viene utilizzata come operatore binario, viene creato un array normale; se viene utilizzata come operatore unario, l'array ha un solo elemento.

Ad esempio, ecco come possiamo ottenere un array costituito da un elemento:

      $array1 = ,1

$array1.GetType()
      

Possiamo confermare la creazione dell'array con l'output mostrato di seguito:

Image

Creazione di un Array Vuoto

In PowerShell, puoi anche creare un array — incluso un array vuoto — utilizzando l'operatore @. Se specifichi @(), ottieni un array senza alcun oggetto, puoi crearne uno. È un modo conveniente per inizializzare le variabili come array e poi aggiungere oggetti agli array senza preoccuparsi del loro numero.

      $array3 = @()

$array3.GetType()
      
Image

Creazione di un Array Fortemente Tipizzato

Per impostazione predefinita, gli elementi di un array possono avere tipi di dati diversi. Ma è possibile anche creare array che accettano solo valori di un singolo tipo designato. Tentare di aggiungere un valore di un tipo diverso produrrà un errore. Ecco come creare gli array fortemente tipizzati più comuni:

Intero:

      [int[]]$intArray = 1, 2, 3
      

Stringa:

      [string[]]$strArray = "one", "two", "three"
      

Data/Ora:

[datetime[]]$dateArray = (Get-Date), (Get-Date).AddDays(1)

Creazione di un array multidimensionale (matrice)

Annidando gli array utilizzando le virgole, è possibile creare un'organizzazione strutturata dei dati in righe o colonne. Qui creiamo una matrice 3×3:

$twoDArray = @(

@(1, 2, 3),

@(4, 5, 6),

@(7, 8, 9)

)

Confronto, raggruppamento, selezione e ordinamento di array

Altri utili cmdlet PowerShell per lavorare con gli array includono:

  • Compare-Object — Confronta due array e restituisce le differenze.
  • Group-Object — Raggruppa gli elementi di un array in base ai valori delle proprietà.
  • Select-Object — Seleziona proprietà specifiche di un oggetto o di un insieme di oggetti e può essere utilizzato anche per selezionare un numero specifico di elementi da un array.
  • Sort-Object — Utilizzato per ordinare array che contengono un solo tipo di dato, come mostrato di seguito:
      $array = @(3, 1, 4, 2)
$sortedArray = $array | Sort-Object
      
Image

Scorrimento di un Array

Per gestire ogni elemento in un array uno dopo l'altro, dobbiamo creare un ciclo utilizzando l'operatore foreach. Ad esempio, se dichiariamo un array di stringhe e vogliamo contare la lunghezza di ogni parola nell'array, dovremmo eseguire lo script seguente:

      $array8 = @("Earth","Mercury","Venus","Jupiter","Saturn","Mars", "Neptune", "Pluto")
foreach ($array in $array8) {
 "$array = " + $array.length
}
      

Il risultato sarà così:

Image

Utilizzando una Pipeline

La pipeline viene utilizzata in PowerShell per passare l'output di un comando come input a un altro. Quando si lavora con gli array, è possibile utilizzare la pipeline per elaborare e manipolare i dati nell'array e assegnare i risultati a un nuovo array o modificare quello esistente.

Qui moltiplicheremo ogni elemento dell'array per 2:

      $numbers = 1,2,3,4,5

$doubled = $numbers | ForEach-Object { $_ * 2 }
      
Image

Aggiungere a un Array

La dimensione di un array in PowerShell è immutabile una volta che è stata definita. Tuttavia, l'operatore += ti permette di creare un nuovo array aggiungendo elementi a un array esistente — di fatto creando un nuovo array combinato.

      $array = @(1, 2, 3)
$array += 4
      
Image

Creazione di un ArrayList

Per array di grandi dimensioni o aggiunte frequenti, l'uso di += può essere un problema di prestazioni, poiché ogni volta che lo si utilizza, viene creato un nuovo array, i vecchi elementi vengono copiati e il nuovo elemento viene aggiunto alla fine. In questi casi, potresti voler utilizzare un ArrayList.

La dimensione di un ArrayList è mutabile, quindi puoi aggiungere o rimuovere elementi senza dover ricreare l'intera collezione. Come un array standard, un ArrayList può contenere elementi di diversi tipi di dati.

Ecco il cmdlet per creare un ArrayList:

      $array3 = New-Object System.Collections.ArrayList

      

Richiedi una prova gratuita di Netwrix Directory Manager

Rimozione di un elemento da un array

Ora utilizziamo un ArrayList per rimuovere un elemento da un array. Prima creiamo un array.

      $array5 = "one", "two", "three", "four", "five"
$array5.gettype()
      

Ora lo aggiungeremo a un ArrayList così possiamo modificarlo facilmente.

      [System.Collections.ArrayList]$ArrayList1 = $array5

$ArrayList1.GetType()
      

Utilizzeremo quindi il comando .Remove.

      $ArrayList1.Remove("three")

      
Image

Svuotare un Array

Non esiste un modo definito per eliminare un array, ma ci sono diversi modi per liberarsi del contenuto di un array (svuotarlo). Uno di questi è assegnare la variabile $null all'array:

      $array7 = $null
$array7
      

Ecco un altro modo per svuotare un array:

      $array = @("element1", "element2", "element3")

$array = @()
      

Ecco come svuotare un ArrayList:

      $arrayList = New-Object System.Collections.ArrayList
$arrayList.Add("element1")
$arrayList.Add("element2")
$arrayList.Clear()
      

Stampa di un Array

Il modo più semplice per visualizzare il contenuto di un array è semplicemente fare riferimento alla variabile dell'array. L'esempio sottostante mostra come includere il testo “Elemento:” prima di ogni elemento nell'array:

Image

Per scrivere su un file .txt, utilizza il comando Out-File.

      $var5 | Out-File C:scriptsarray.txt

      

Per esportare in un file .csv, utilizza il comando Export-Csv :

      $var6 | Export-Csv -Path C:scriptsarray.csv

      

Filtrare un Array

Possiamo utilizzare il cmdlet Where-Object per recuperare solo i numeri pari da un array:

      $numbers = 1,2,3,4,5,6

$evenNumbers = $numbers | Where-Object { $_ % 2 -eq 0 }

$evenNumbers
      
Image

In alternativa, possiamo utilizzare il metodo .Where() che non richiede una pipeline:

      $numbers = 1,2,3,4,5,6

$evenNumbers = $numbers.Where({ $_ % 2 -eq 0 })

$evenNumbers

      

Verifica della lunghezza di un array

Per restituire il numero di elementi in un array, utilizzare il parametro .length :

      $array6 = 1,2,3,4,5,6
echo $array6.Length
      
Image

Verifica se un Array Contiene un Valore Specifico

Se vuoi verificare se uno degli elementi in un array contiene un valore particolare, usa il metodo Contains. Questo codice mostrerà se un array contiene un 2 o un 12:

      $array7 = 1,2,5,8,3,4,5
$array7.Contains(2)
$array7.Contains(12)
      
Image

Accesso agli elementi tramite l'indice dell'array

Come nella maggior parte dei linguaggi di programmazione, ogni elemento individuale in un array PowerShell può essere accesso tramite un indice. L'indice di un array inizia da zero, quindi in un array di tre elementi, il primo elemento si trova all'indice 0, il secondo all'indice 1 e il terzo all'indice 2.

Per accedere agli elementi utilizzando l'indice dell'array, è necessario fornire l'indice tra parentesi quadre dopo la variabile dell'array. Di seguito è riportato un esempio che mostra come creare un array e mostrare il secondo elemento:

      $colors = "Red", "Green", "Blue", "Yellow"

$secondColor = $colors[1]

Write-Output $secondColor
      
Image

Puoi accedere agli elementi dalla fine di un array utilizzando un indice negativo. -1 si riferisce all'ultimo elemento, -2 si riferisce al penultimo elemento, ecc.

Utilizzando l'operatore Join e l'operatore Split

In PowerShell, l'operatore join viene utilizzato per unire un array di stringhe in una singola stringa, opzionalmente utilizzando un delimitatore specificato. Ecco un esempio senza delimitatore.

      $array = "Power", "Shell"

$joined = $array -join ""

# Output: "PowerShell"
      

Ecco come sarebbe con un delimitatore:

Image

L'operatore split fa essenzialmente il contrario dell'operatore join, come mostrato nell'esempio sottostante:

      $string = "apple,banana,grape"
$fruits = $string -split ","
      
Image

Utilizzando l'operatore Replace

L'operatore replace viene utilizzato per sostituire una stringa con un'altra. Ecco la struttura del cmdlet:

      <originalString> -replace <patternToFind>, <replacementString>

      

Ecco un esempio che sostituirà “Hello World” con “PowerShell”:

      $string = "Hello World"

$newString = $string -replace "World", "PowerShell"

      
Image

Suddividere un Array

È possibile creare un sotto-array specificando un intervallo, come mostrato qui:

      $array = 1,2,3,4,5,6,7,8,9

$subset = $array[3..6]

      

Inversione di un Array

Ecco un esempio di come invertire l'ordine degli elementi in un array:

      $numbers = 1..5

[Array]::Reverse($numbers)
      

Conclusione

Gli array sono una struttura dati fondamentale nella maggior parte dei linguaggi di scripting e di programmazione perché ti permettono di memorizzare, recuperare e manipolare una collezione di elementi di vari tipi di dati. Comprendere gli array migliorerà la tua capacità di automatizzare compiti utilizzando PowerShell.

Ora Netwrix può aiutare

Hai bisogno di proteggere il tuo Active Directory e l'ambiente Entra ID (Azure AD) in modo più efficiente ed efficace? Prendi in considerazione Netwrix Directory Manager. Le sue capacità automatizzate di gestione di gruppi e utenti riducono il rischio di violazioni dei dati eliminando al contempo compiti amministrativi manuali che fanno perdere tempo.

Netwrix Directory Manager ti consente di:

  • Automatizza il provisioning e il deprovisioning degli utenti dal tuo sistema informativo delle risorse umane (HRIS) ad Active Directory, Entra ID e applicazioni abilitate SCIM, consentendo così ai nuovi dipendenti di essere rapidamente produttivi e riducendo il rischio che gli avversari prendano il controllo di identità inutilizzate.
  • Aggiornate automaticamente i gruppi di directory in base a cambiamenti come la promozione di un dipendente o il passaggio a un altro ruolo, come registrato nel vostro HRIS. Questa automazione mantiene i diritti di accesso aggiornati in tempo quasi reale come richiesto per la sicurezza e la conformità, risparmiando tempo al vostro team IT.
  • Delega la gestione di gruppi e utenti alle persone che sanno chi dovrebbe avere accesso a cosa. Flussi di lavoro semplici consentono ai responsabili delle linee di business di rivedere i loro gruppi e approvare o negare le richieste di accesso degli utenti, riducendo il rischio di avere gruppi e utenti con troppi privilegi nella tua directory.
  • Mantieni la directory pulita e più facile da gestire con la creazione, la scadenza e l'eliminazione automatica degli utenti.
  • Mantieni e dimostra la conformità con le normative e gli standard grazie a un'intuizione profonda, automazione efficace e rapporti chiari su gruppi e membri.

Padroneggia le basi dello scripting di Windows PowerShell

Scopri di più



Condividi su

Scopri di più

Informazioni sull'autore

Asset Not Found

Jonathan Blackwell

Responsabile dello Sviluppo Software

Dal 2012, Jonathan Blackwell, ingegnere e innovatore, ha fornito una leadership ingegneristica che ha posizionato Netwrix GroupID all'avanguardia nella gestione di gruppi e utenti per ambienti Active Directory e Azure AD. La sua esperienza nello sviluppo, nel marketing e nelle vendite permette a Jonathan di comprendere appieno il mercato dell'Identity Management e il modo di pensare degli acquirenti.