No PowerShell, o escopo deve impedir que objetos (variáveis, aliases, funções etc.) nos scripts afetem o ambiente global. Isto parece funcionar bem na linha de comando, mas não no ISE.
Aqui está uma demonstração no console. Verifico $x
se não está definido no escopo global, mostro o conteúdo ScopeTest.ps1
e o executo e, por último, verifico se $x
está definido novamente. Como esperado, $x
é criado e usado apenas dentro do escopo do script e não persiste no ambiente global após o término do script.
No ISE, isto parece funcionar se o script for chamado usando a janela do console.
No entanto, se eu realmente usar o botão "Executar Script", ou F5, as variáveis dentro do script persistirão após a conclusão.
Isso pode dificultar a escrita e a solução de problemas de scripts, se o script assumir que será iniciado em um ambiente limpo (ou seja: quaisquer variáveis definidas no script ainda não devem existir). Por que o ISE se comporta dessa maneira?
Uma resposta a esta pergunta aborda o tópico apenas um pouco, mencionando "fonte de pontos", mas espero obter uma explicação mais completa aqui. Além disso, se a documentação existir sobre o motivo pelo qual o script é executado de maneira diferente no ISE e no console, uma referência também seria agradável.