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