Предполагается, что в PowerShell область действия не позволяет объектам (переменным, псевдонимам, функциям и т.д.) В сценариях влиять на глобальную среду. Это, кажется, работает хорошо в командной строке, но не в ISE.
Вот демонстрация в консоли. Я проверяю, что $x
не определено в глобальной области видимости, показываю содержимое ScopeTest.ps1
а затем запускаю его, и, наконец, проверяю, определено ли $x
снова. Как и ожидалось, $x
создается и используется только в области действия сценария и не сохраняется в глобальной среде после завершения сценария.
В ISE это действительно работает, если скрипт вызывается с помощью окна консоли.
Однако, если я на самом деле использую кнопку "Выполнить сценарий" или клавишу F5, переменные в сценарии сохранятся после его завершения.
Это может усложнить написание и устранение неполадок в сценариях, если сценарий предполагает, что он будет запускаться из чистой среды (т. Е. Любые переменные, установленные в сценарии, еще не должны существовать). Почему ИСЕ ведет себя таким образом?
Ответ на этот вопрос слегка затрагивает тему, упоминая «точечный источник», но я надеюсь получить здесь более подробное объяснение. Кроме того, если документация существует относительно того, почему сценарий выполняется по-другому в ISE, чем из консоли, ссылка была бы также хороша.