En PowerShell, se supone que el alcance evita que los objetos (variables, alias, funciones, etc.) en los scripts afecten el entorno global. Esto parece funcionar bien en la línea de comando, pero no en el ISE.
Aquí hay una demostración en la consola. Verifico que $x
no está definido en el ámbito global, muestro el contenido ScopeTest.ps1
y luego lo ejecuto, y finalmente verifico si $x
está definido nuevamente. Como se esperaba, $x
solo se crea y utiliza dentro del alcance del script y no persiste en el entorno global después de que el script haya finalizado.
En el ISE, esto parece funcionar si se llama al script usando la ventana de la consola.
Sin embargo, si realmente uso el botón "Ejecutar script", o F5, las variables dentro del script persistirán después de que se complete.
Esto puede dificultar un poco la escritura y la resolución de problemas de los scripts, si el script supone que comenzará desde un entorno limpio (es decir: cualquier variable establecida dentro del script no debería existir). ¿Por qué el ISE se comporta de esta manera?
Una respuesta a esta pregunta toca el tema un poco, mencionando el "abastecimiento de puntos", pero espero obtener una explicación más completa aquí. Además, si existe documentación sobre por qué el script se ejecuta de manera diferente en el ISE que desde la consola, una referencia también sería buena.
fuente
por lo que el ISE tiene el alcance global. A menos que elimine todas las variables creadas mientras trabaja en el ISE, todas las variables estarán disponibles después de que se ejecute el script. Cuando uso el ISE para construir mi script, siempre probaré con una consola PowerShell diferente abierta. Esto me permite asegurarme de que todo funcione como estaba previsto.
fuente