Come utilizzare il simbolo @ in PowerShell
-
Usa il simbolo
@
per creare un array in PowerShell -
Usa il simbolo
@
per creare una hash table in PowerShell -
Usa il simbolo
@
per gli Here-Strings in PowerShell -
Usa il simbolo
@
per eseguire lo splatting con array in PowerShell -
Usa il simbolo
@
per eseguire lo splatting con hash tables in PowerShell - Conclusione

PowerShell, un potente linguaggio di scripting e shell a riga di comando, è noto per la sua flessibilità e il suo ampio set di funzionalità. Una delle caratteristiche meno conosciute ma incredibilmente potenti di PowerShell è l’uso del simbolo @
.
Questo articolo approfondisce le molteplici applicazioni del simbolo @
nel scripting di PowerShell, rivelandone le capacità nella creazione di array, hash table e here-strings, in particolare nella tecnica avanzata dello splatting. Lo splatting, un metodo per passare parametri a funzioni e cmdlet, migliora significativamente la leggibilità e la manutenibilità degli script.
Esplorando questi usi del simbolo @
, l’articolo funge da guida completa sia per i principianti che per gli utenti esperti di PowerShell che cercano di sfruttare appieno il potenziale di questo linguaggio di scripting.
Usa il simbolo @
per creare un array in PowerShell
In PowerShell, il simbolo @
è versatile, ma uno dei suoi ruoli fondamentali è nella creazione e manipolazione di array. Gli array sono essenziali in qualsiasi linguaggio di programmazione, servendo come modo per memorizzare e manipolare una collezione di elementi.
Il simbolo @
di PowerShell fornisce un metodo chiaro e conciso per definire array, garantendo che anche singoli elementi o risultati di comandi siano trattati come array.
Esempio:
# Define a simple Print function
function Print($message) {
Write-Host $message
}
# Create an array of numbers
$numbers = @(1, 2, 3, 4, 5)
# Iterate over the array and print each number
foreach ($number in $numbers) {
Print $number
}
In questo script, definiamo prima una funzione Print
che prende un singolo parametro $message
e utilizza Write-Host
per visualizzarlo. Questa funzione serve come meccanismo di output di base per la nostra dimostrazione.
Successivamente, creiamo un array, $numbers
, utilizzando il simbolo @
. Questo array è inizializzato con cinque numeri: 1
, 2
, 3
, 4
e 5
.
Nota l’uso di @()
attorno ai numeri, assicurando che siano trattati come un array.
Dopo la creazione dell’array, utilizziamo un ciclo foreach
per iterare su ogni elemento nell’array $numbers
. All’interno del ciclo, chiamiamo la nostra funzione Print
, passando ogni numero a turno.
Output:
Usa il simbolo @
per creare una hash table in PowerShell
Una hash table è una struttura dati compatta che memorizza una o più coppie di chiavi e valori. È nota anche come dizionario o array associativo.
La sintassi per creare una hash table in PowerShell inizia con il simbolo @
. Le chiavi e i valori sono racchiusi nelle parentesi {}
.
Esempio:
# Define a simple Print function
function Print($message) {
Write-Host $message
}
# Create a hashtable of employee details
$employee = @{
Name = 'John Doe'
Department = 'IT'
Position = 'Analyst'
}
# Iterate over the hashtable and print each detail
foreach ($key in $employee.Keys) {
$value = $employee[$key]
Print "Key: $key, Value: $value"
}
In questo script, iniziamo definendo una funzione Print
, che è un’utilità di base per l’output di messaggi all’host.
Successivamente, creiamo una hash table $employee
utilizzando il simbolo @
. Questa hash table contiene tre coppie chiave-valore che rappresentano il nome di un dipendente, il dipartimento e la posizione.
Dopo aver definito la hash table, utilizziamo un ciclo foreach
per iterare attraverso ogni chiave nella hash table. All’interno del ciclo, recuperiamo il valore corrispondente a ciascuna chiave e quindi utilizziamo la nostra funzione Print
per visualizzare sia la chiave sia il suo valore.
Output:
Usa il simbolo @
per gli Here-Strings in PowerShell
Un altro uso importante del simbolo @
è per definire here-strings in PowerShell. Le virgolette vengono interpretate letteralmente in un here-string.
Lo scopo principale degli here-strings in PowerShell è semplificare la gestione di stringhe lunghe, in particolare quelle che richiedono formattazione specifica, interruzioni di riga o caratteri speciali. La gestione delle stringhe normali in PowerShell, utilizzando virgolette singole '
o virgolette doppie "
, può diventare ingombrante con testi su più righe.
Esempio:
# Define a simple Print function
function Print($message) {
Write-Host $message
}
# Define a variable
$name = "John"
# Create an expandable here-string
$multiLineText = @"
Hello, $name!
Welcome to PowerShell scripting.
This is an example of a multi-line here-string.
"@
# Print the here-string
Print $multiLineText
In questo script, iniziamo definendo una funzione Print
per visualizzare l’output.
Definiamo quindi una variabile $name
impostata su John
. Successivamente, creiamo un here-string espandibile $multiLineText
.
Nota come i delimitatori @" "@
siano usati per iniziare e terminare la stringa su più righe. All’interno di questo here-string, è incluso la variabile $name
, che verrà espansa al suo valore.
Infine, chiamiamo la funzione Print
per visualizzare il contenuto del nostro here-string.
Output:
Un here-string contiene tutti i testi tra @" "@
.
Here-string con virgolette singole:
# Define a simple Print function
function Print($message) {
Write-Host $message
}
# Create a single-quoted here-string
$literalText = @'
This is an example of a single-quoted here-string.
Special characters like $ or ` won't be processed.
Everything here is treated as literal text.
'@
# Print the here-string
Print $literalText
Nel nostro script, iniziamo definendo una funzione Print
che restituisce un messaggio dato all’host.
Successivamente, creiamo un here-string con virgolette singole chiamato $literalText
. I delimitatori @' '@
indicano l’inizio e la fine dell’here-string.
All’interno di questi delimitatori, includiamo testo che menziona caratteri speciali come $
e backtick `
, che avrebbero normalmente significati speciali in PowerShell.
Infine, chiamiamo la funzione Print
per visualizzare il contenuto del nostro here-string.
Output:
Negli here-strings con virgolette singole, le variabili sono interpretate letteralmente e stampate nell’output, ma non negli here-strings con virgolette doppie.
Usa il simbolo @
per eseguire lo splatting con array in PowerShell
Lo splatting è principalmente utilizzato per migliorare la leggibilità e la manutenibilità degli script, specialmente quando si trattano comandi che richiedono un gran numero di parametri. Piuttosto che elencare ciascun parametro e il suo valore direttamente nel comando, lo splatting consente di definirli in un array o in una hash table e passarli tutti insieme utilizzando il simbolo @
.
Puoi utilizzare il simbolo @
per lo splatting degli array nel comando. Il simbolo @
può utilizzare un array per splattare valori per parametri di posizione che non necessitano dei nomi dei parametri.
Esempio:
# Define a simple Print function
function Print-Message($part1, $part2, $part3) {
Write-Host "$part1 - $part2 - $part3"
}
# Define an array of parameters
$paramArray = @('Hello', 'PowerShell', 'Splatting')
# Call the function using splatting
Print-Message @paramArray
In questo esempio, iniziamo definendo una funzione Print-Message
che accetta tre parametri e li visualizza in una stringa formattata.
Creiamo quindi un array $paramArray
contenente tre valori stringa: Hello
, PowerShell
e Splatting
. Questi valori corrispondono ai parametri $part1
, $part2
, e $part3
della nostra funzione.
Quando chiamiamo la funzione Print-Message
, utilizziamo lo splatting per passare l’array di parametri. Il simbolo @
prima di $paramArray
indica che gli elementi dell’array devono essere mappati ai parametri della funzione nel loro rispettivo ordine.
Output:
Usa il simbolo @
per eseguire lo splatting con hash tables in PowerShell
Analogamente, puoi utilizzare il simbolo @
per lo splatting delle hash tables.
Lo scopo principale dello splatting con hash tables è semplificare il processo di passaggio di parametri a funzioni e cmdlet in PowerShell. Diventa particolarmente prezioso nella gestione di comandi complessi con numerosi parametri, migliorando la leggibilità e la manutenibilità del codice.
Lo splatting consente un modo più strutturato e pulito di specificare i parametri, il che è vantaggioso nel debug e nell’editing degli script.
Esempio:
# Define a simple function
function Get-Greeting {
param (
[string]$Name,
[string]$TimeOfDay
)
"Good $TimeOfDay, $Name!"
}
# Define a hash table of parameters
$greetingParams = @{
Name = 'Alice'
TimeOfDay = 'Morning'
}
# Call the function using splatting
$greeting = Get-Greeting @greetingParams
Write-Host $greeting
Nel nostro script, definiamo prima una funzione Get-Greeting
che accetta due parametri: Name
e TimeOfDay
.
Successivamente, creiamo una hash table $greetingParams
e la popoliamo con le chiavi Name
e TimeOfDay
, assegnando loro i valori 'Alice'
e 'Morning'
, rispettivamente. Queste chiavi corrispondono ai nomi dei parametri della funzione Get-Greeting
.
Quando chiamiamo Get-Greeting
, utilizziamo lo splatting anteponendo la variabile della hash table $greetingParams
con il simbolo @
. Questa azione mappa le chiavi della hash table ai parametri corrispondenti della funzione.
Output:
Conclusione
In questo articolo, abbiamo esplorato le versatili applicazioni del simbolo @
in PowerShell, un aspetto che spesso passa inosservato ma che ha un immenso potenziale nello scripting. Dalla creazione di array e hash tables alla definizione di here-strings e all’implementazione dello splatting, il simbolo @
è uno strumento piccolo ma potente nell’arsenale di un programmatore PowerShell.
La sua capacità di semplificare il passaggio di parametri complessi e migliorare la leggibilità del codice è particolarmente rilevante nel contesto dello splatting con array e hash tables. Come abbiamo visto, l’uso del simbolo @
in PowerShell non è solo una questione di sintassi, ma una porta d’accesso a pratiche di scripting più efficienti, leggibili e manutenibili.