Come Restituire un Valore in PowerShell
-
Utilizzare la parola chiave
return
in PowerShell - Valori di ritorno nella pipeline in PowerShell
- Definizione delle classi in PowerShell 5

In generale, la parola chiave return
esce da una funzione, script o blocco di script. Quindi, ad esempio, possiamo usarla per lasciare un ambito a un punto specifico, restituire un valore o indicare che si è raggiunta la fine dell’ambito.
Tuttavia, in Windows PowerShell, utilizzare la parola chiave return
può essere un po’ confuso poiché il tuo script potrebbe stampare un output che non ti aspettavi.
Questo articolo discuterà di come funziona la parola chiave return
e di come utilizzarla correttamente in Windows PowerShell.
Utilizzare la parola chiave return
in PowerShell
Il blocco di script sottostante è la forma base della sintassi della parola chiave return
.
return <expression>
La parola chiave return
può apparire da sola, oppure un valore o un’espressione possono seguirla. La parola chiave return
da sola ritornerà il prompt dei comandi al suo punto di chiamata precedente.
return
return $a
return (1 + $a)
L’esempio sottostante utilizza la parola chiave return
per uscire da una funzione se una condizione è soddisfatta a un punto specifico. In questo esempio, i numeri dispari non vengono moltiplicati perché l’istruzione di ritorno precede l’esecuzione di tale istruzione.
function MultiplyOnlyEven {
param($num)
if ($num % 2) { return "$num is not even" }
$num * 2
return
}
1..10 | ForEach-Object { MultiplyOnlyEven -Num $_ }
Output:
1 is not even
4
3 is not even
8
5 is not even
12
7 is not even
16
9 is not even
20
Windows PowerShell ha una semantica di ritorno confusa se vista da una prospettiva di programmazione più nativa. Ci sono due idee principali che dobbiamo considerare:
- Tutti gli output sono catturati e restituiti.
- La parola chiave return indica un punto di uscita logico.
Detto questo, i seguenti coppie di blocchi di script restituiranno il valore della variabile $a
.
Parola chiave return con un’espressione:
$a = "Hello World"
return $a
Parola chiave return senza un’espressione:
$a = "Hello World"
$a
return
La parola chiave return
non è necessaria nemmeno nel secondo blocco di script, poiché chiamare la variabile nella riga di comando restituirà esplicitamente tale variabile.
Valori di ritorno nella pipeline in PowerShell
Quando restituisci un valore dal tuo blocco di script o funzione, Windows PowerShell automaticamente estrae i membri e li invia uno alla volta attraverso la pipeline. Il motivo dietro questo caso d’uso è dovuto all’elaborazione di Windows PowerShell uno alla volta.
La seguente funzione dimostra che questa idea restituirà un array di numeri.
function Test-Return {
$array = 1, 2, 3
return $array
}
Test-Return | Measure-Object | Select-Object Count
Output:
Count
-----
3
Quando utilizzi il cmdlet Test-Return
, l’output della funzione sottostante viene inviato al cmdlet Measure-Object
. Il cmdlet conterà il numero di oggetti nella pipeline e, una volta eseguito, il conteggio restituito è tre.
Per far sì che un blocco di script o una funzione restituisca solo un singolo oggetto alla pipeline, utilizza uno dei seguenti metodi:
Utilizzare l’espressione array unaria in PowerShell
Utilizzare un’espressione unaria può inviare il tuo valore di ritorno attraverso la pipeline come un singolo oggetto, come dimostrato dal seguente esempio.
function Test-Return {
$array = 1, 2, 3
return (, $array)
}
Test-Return | Measure-Object | Select-Object Count
Output:
Count
-----
1
Utilizzare Write-Output
con il parametro NoEnumerate
in PowerShell
Possiamo anche utilizzare il cmdlet Write-Output
con il parametro -NoEnumerate
. L’esempio sottostante utilizza il cmdlet Measure-Object
per contare gli oggetti inviati alla pipeline dalla funzione di esempio tramite la parola chiave return
.
Codice di esempio:
function Test-Return {
$array = 1, 2, 3
return Write-Output -NoEnumerate $array
}
Test-Return | Measure-Object | Select-Object Count
Output:
Count
-----
1
Un altro metodo per costringere la pipeline a restituire solo un singolo oggetto è stato introdotto nella versione 5 di PowerShell, di cui discuteremo nella prossima sezione dell’articolo.
Definizione delle classi in PowerShell 5
Con la versione 5.0 di Windows PowerShell, ora possiamo creare e definire le nostre classi personalizzate. Trasforma la tua funzione in una classe e la parola chiave return
restituirà solo l’oggetto singolo immediatamente precedente.
Codice di esempio:
class test_class {
[int]return_what() {
Write-Output "Hello, World!"
return 1000
}
}
$tc = New-Object -TypeName test_class
$tc.return_what()
Output:
1000
Se la classe sopra è una funzione, restituirà tutti i valori memorizzati nella pipeline.
Output:
Hello World!
1000
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn