У PowerShell передбачається, що масштабування має захищати об'єкти (змінні, псевдоніми, функції тощо) у сценаріях від впливу на глобальне середовище. Здається, це працює добре в командному рядку, але не в ISE.
Ось демонстрація на консолі. Я перевіряю, $x
чи не визначено це у глобальній області, показую вміст, ScopeTest.ps1
а потім запускаю його, і нарешті, я перевіряю, чи $x
визначено знову. Як очікувалося, $x
він створюється та використовується лише в межах сценарію та не зберігається в глобальному середовищі після припинення дії сценарію.
У ISE це, здається, працює, якщо сценарій викликається за допомогою вікна консолі.
Однак якщо я дійсно використовую кнопку "Запустити сценарій" або F5, змінні в сценарії зберігатимуться після його завершення.
Це може зробити ускладнення написання та усунення несправностей, якщо сценарій передбачає, що він починається з чистого середовища (тобто: будь-які змінні, встановлені в сценарії, вже не повинні існувати.) Чому ISE поводиться таким чином?
Відповідь на це питання трошки торкається цієї теми, згадуючи "джерело крапок", але я сподіваюся отримати тут більш ретельне пояснення. Крім того, якщо існує документація щодо того, чому сценарій запускається в ISE інакше, ніж на консолі, було б непоганим також посилання.