Come Restituire un Valore in PowerShell

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

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:

  1. Tutti gli output sono catturati e restituiti.
  2. 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
Ti piacciono i nostri tutorial? Iscriviti a DelftStack su YouTube per aiutarci a creare altre guide video di alta qualità. Iscriviti
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn