Usare l'ambito delle variabili negli script di Windows PowerShell

Completato

A livello intuitivo, si potrebbe presupporre di poter accedere nello script alla variabile denominata $computer impostata in una funzione quando quest'ultima viene completata. Tuttavia, non è questo il caso. Le variabili hanno un ambito specifico e le interazioni tra ambiti sono limitate.

Nella tabella seguente vengono descritti i tre ambiti e il modo in cui influiscono sull'uso delle variabili.

Tabella 1: Ambiti

Ambito Descrizione
Peering di reti virtuali L'ambito globale è destinato al prompt di Windows PowerShell. Le variabili impostate al prompt di Windows PowerShell possono essere esaminate in tutti gli script avviati da tale prompt. Le variabili create a un prompt di Windows PowerShell non esistono in altri prompt di Windows PowerShell o in istanze dell'ISE (Integrated Scripting Environment) di Windows PowerShell.
Script L'ambito a livello di script è destinato a un singolo script. Le variabili impostate all'interno di uno script possono essere esaminate da tutte le funzioni di tale script. Se nell'ambito a livello di script si imposta il valore di una variabile che esiste già nell'ambito globale, nell'ambito a livello di script viene creata una nuova variabile. Esistono quindi due variabili con lo stesso nome in due ambiti distinti. A questo punto, quando si esamina il valore della variabile nello script, viene restituito quello nell'ambito a livello di script.
Funzione L'ambito a livello di funzione è destinato a una singola funzione. Le variabili impostate all'interno di una funzione non vengono condivise con altre funzioni o con lo script. Se nell'ambito a livello di funzione si imposta il valore di una variabile che esiste già nell'ambito globale o nell'ambito dello script, nell'ambito della funzione viene creata una nuova variabile. Esistono quindi due variabili con lo stesso nome in due ambiti distinti.

Nota

Per non creare confusione, è consigliabile evitare di usare gli stessi nomi di variabile in ambiti diversi.

Oltre a esaminare una variabile in un ambito di livello superiore, è anche possibile modificarla facendo riferimento specificamente al relativo ambito. Per modificare una variabile nell'ambito a livello di script, usare la sintassi seguente:

$script:var = "Modified from function"

Per non creare confusione, è consigliabile evitare di modificare le variabili tra ambiti. Impostare invece la variabile dell'ambito a livello di script in modo che sia uguale all'output della funzione. Se i dati nella funzione si trovano in una variabile, è possibile usare Return() per passarli di nuovo allo script.

Di seguito è riportato un esempio di utilizzo di Return() alla fine di una funzione per passare di nuovo un valore di variabile all'ambito dello script:

Return($users) 

Nota

L'uso di Return() in una funzione aggiunge i dati specificati alla pipeline di dati restituiti, ma non sostituisce i dati esistenti nella pipeline. Come parte dello sviluppo di script, è necessario verificare esattamente quali dati vengono restituiti da una funzione.