在 PowerShell 中,作用域应该防止脚本中的对象(变量、别名、函数等)影响全局环境。这在命令行中似乎可以正常工作,但在 ISE 中则不然。
这是控制台中的演示。我检查是否$x
在全局范围内未定义,显示内容ScopeTest.ps1
然后运行它,最后检查是否$x
再次定义。正如预期的那样,$x
仅在脚本范围内创建和使用,并且在脚本终止后不会在全局环境中持续存在。
在 ISE 中,如果使用控制台窗口调用脚本,这似乎确实有效。
但是,如果我实际使用“运行脚本”按钮或 F5,脚本中的变量将在完成后保留。
如果脚本假定它将从干净的环境开始(即:脚本中设置的任何变量不应该已经存在。),这会使编写和故障排除脚本有点困难。为什么 ISE 会以这种方式运行?
这个问题的答案稍微触及了这个话题,提到了“点源”,但我希望在这里得到更彻底的解释。此外,如果存在有关脚本在 ISE 中的运行方式与控制台中运行方式不同的原因的文档,也可以提供参考。
在您的脚本示例中,您创建了变量,并且没有在脚本结束时销毁它们。ISE 创建 PowerShell 的实时实例,当您单击运行时,该实例会加载并运行脚本。不同的是集成的shell可以继续脚本。这是调试环境和随时创建脚本的理想选择。这样您就不必一遍又一遍地运行脚本(在某些情况下这并不理想)以确保下一行代码正常工作。您在 shell 中键入它,如果它有效,则将其添加到脚本部分。
这种行为可能最好在这里描述:http : //technet.microsoft.com/en-us/library/dd819480.aspx
相关摘录:
ISE 中的所有窗格始终在同一范围内。
如果您不希望您的变量在脚本完成后存在于 shell 中,那么您应该使用Remove-Variable
它们。
例如:
Remove-Variable x
Run Code Online (Sandbox Code Playgroud)
您可以通过单击“文件”->“新建 Powershell”选项卡将 powershell 的“干净”实例添加到 ISE
归档时间: |
|
查看次数: |
5828 次 |
最近记录: |