In PowerShell, l'ambito dovrebbe impedire agli oggetti (variabili, alias, funzioni, ecc.) Negli script di influire sull'ambiente globale. Questo sembra funzionare bene nella riga di comando, ma non nell'ISE.
Ecco una dimostrazione nella console. Controllo per vedere che $x
non è definito nell'ambito globale, mostrare il contenuto ScopeTest.ps1
e quindi eseguirlo, e infine controllo per vedere se $x
è definito di nuovo. Come previsto, $x
viene creato e utilizzato solo nell'ambito dello script e non persiste nell'ambiente globale dopo la fine dello script.
In ISE, questo sembra funzionare se lo script viene chiamato utilizzando la finestra della console.
Tuttavia, se effettivamente utilizzo il pulsante "Esegui script" o F5, le variabili all'interno dello script persisteranno dopo il completamento.
Ciò può rendere un po 'difficile la scrittura e la risoluzione degli script, se lo script presuppone che verrà avviato da un ambiente pulito (ad esempio: eventuali variabili impostate all'interno dello script non dovrebbero già esistere). Perché l'ISE si comporta in questo modo?
Una risposta a questa domanda tocca leggermente l'argomento, menzionando "dot-sourcing", ma spero di ottenere una spiegazione più approfondita qui. Inoltre, se esiste una documentazione sul perché lo script viene eseguito in modo diverso nell'ISE rispetto alla console, anche un riferimento sarebbe utile.