在PowerShell中,作用域应该使脚本中的对象(变量,别名,函数等)不会影响全局环境。这似乎在命令行中正常工作,但在ISE中没有。
这是控制台中的演示。我检查一下 $x
未在全局范围内定义,显示内容 ScopeTest.ps1
然后运行它,最后我检查是否 $x
再次定义。正如所料, $x
仅在脚本范围内创建和使用,并且在脚本终止后不会在全局环境中保留。
在ISE中,如果使用控制台窗口调用脚本,这似乎有效。
但是,如果我实际使用“运行脚本”按钮或F5,脚本中的变量将在完成后保留。
如果脚本假定它将从一个干净的环境开始(即:脚本中设置的任何变量都不应该存在),这可能会使编写和故障排除脚本变得有点困难。为什么ISE会以这种方式运作?
答案 这个问题 稍微谈到这个话题,提到“点源”,但我希望在这里得到更全面的解释。此外,如果存在关于脚本在ISE中以不同方式运行而不是从控制台运行的原因的文档,那么引用也会很好。