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.
fonte
então o ISE tem como escopo global. A menos que você remova todas as variáveis criadas ao trabalhar no ISE, todas as variáveis estarão disponíveis após a execução do script. Quando uso o ISE para criar meu script, sempre testarei com um console diferente do PowerShell aberto. Isso me permite garantir que tudo funcione como eu pretendia.
fonte