为什么PowerShell ISE不将脚本变量隔离到脚本作用域?

伊齐

在PowerShell中,作用域应该防止脚本中的对象(变量,别名,函数等)影响全局环境。这似乎在命令行上可以正常工作,但在ISE中却不能。

这是控制台中的演示。我检查$x是否未在全局范围中定义,显示的内容,ScopeTest.ps1然后运行它,最后检查是否$x再次定义。如预期的那样,$x仅在脚本范围内创建和使用该脚本,并且在脚本终止后不会在全局环境中保留。

在此处输入图片说明

在ISE中,如果使用控制台窗口调用脚本,这似乎可以正常工作。

在此处输入图片说明

但是,如果我实际使用“运行脚本”按钮或F5,则脚本中的变量在完成后将保留。

在此处输入图片说明

如果脚本假定脚本将在干净的环境中启动,则这可能会使脚本编写和故障排除变得有些困难(即:脚本中设置的任何变量都不应该存在。)。为什么ISE会以这种方式运行?

这个问题的答案只是略微涉及到该主题,提到了“点源”,但是我希望在这里得到更详尽的解释。另外,如果存在有关为什么脚本在ISE中与在控制台中以不同方式运行的文档,那么参考也将是不错的选择。

柯林1337

In your script examples you created variables and you didn't destroy them at the end of your script. The ISE creates a live instance of powershell which loads and runs the script when you click run. The difference is that the integrated shell can continue the script. This is ideal for debugging the environment and for creating scripts as you go. This way you don't have to keep running your script over and over (there are situations where this wouldn't be ideal) to make sure the next line of code worked. You type it in the shell, and if it works, you add it to the script section.

This behavior is perhaps best described here: http://technet.microsoft.com/en-us/library/dd819480.aspx

Relevant Excerpt:

All panes in ISE are always in the same scope.

如果您不希望在脚本完成后将变量Remove-Variable保留在Shell中,则应该使用它们。

例如:

Remove-Variable x

您可以通过单击“文件”->“新Powershell”选项卡将Powershell的“干净”实例添加到ISE。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么在PowerShell中看不到脚本的参数?

来自分类Dev

为什么此PowerShell脚本构造意外的文件路径?

来自分类Dev

为什么在PowerShell中看不到脚本的参数?

来自分类Dev

为什么在 C# 中的 Powershell 脚本中使用 Runspace

来自分类Dev

BASH脚本:为什么我的变量不起作用

来自分类Dev

以本地管理员身份运行powershell脚本。为什么不起作用?

来自分类Dev

Powershell-为什么不能在脚本中使用此变量?

来自分类Dev

为什么“发送邮件消息”在Powershell控制台中起作用但在PowerShell ISE中不起作用?

来自分类Dev

为什么此Powershell功能更改目录不起作用?

来自分类Dev

为什么在PowerShell中的.split对我不起作用?

来自分类Dev

为什么此PowerShell别名不起作用?

来自分类Dev

为什么这个 powershell 代码片段不起作用?

来自分类Dev

为什么 PowerShell SetEnvironmentVariable 命令会删除现有变量?

来自分类Dev

为什么我的程序从Powershell编辑中断到特定文件?

来自分类Dev

为什么Awk弄乱了我的脚本变量

来自分类Dev

为什么外部作用域变量没有正确地绑定到内部变量?

来自分类Dev

为什么此New-Item命令在Powershell中而不在ps1脚本中起作用?

来自分类Dev

为什么不将通知更新绑定到变量?

来自分类Dev

在不继承变量和作用域的情况下从另一个运行一个PowerShell脚本

来自分类Dev

为什么运行我的python脚本时powershell冻结了一段时间

来自分类Dev

为什么Source Tree不能通过Git区分Powershell脚本(ps1)

来自分类Dev

为什么从Powershell传递args会在脚本本身内部工作时出错

来自分类Dev

为什么此Powershell脚本会提取意外文件以进行ipv4搜索?

来自分类Dev

为什么命令行执行为Powershell中的脚本执行提供了不同的结果

来自分类Dev

为什么在此PowerShell脚本中有这么多StringConstantExpressionAst?

来自分类Dev

为什么我不能在批处理文件中运行此Powershell脚本?

来自分类Dev

为什么运行我的python脚本时powershell冻结了一段时间

来自分类Dev

为什么此Powershell脚本在根文件夹之外创建转换后的图像?

来自分类Dev

为什么从Powershell传递args会在脚本本身内部工作时出错

Related 相关文章

  1. 1

    为什么在PowerShell中看不到脚本的参数?

  2. 2

    为什么此PowerShell脚本构造意外的文件路径?

  3. 3

    为什么在PowerShell中看不到脚本的参数?

  4. 4

    为什么在 C# 中的 Powershell 脚本中使用 Runspace

  5. 5

    BASH脚本:为什么我的变量不起作用

  6. 6

    以本地管理员身份运行powershell脚本。为什么不起作用?

  7. 7

    Powershell-为什么不能在脚本中使用此变量?

  8. 8

    为什么“发送邮件消息”在Powershell控制台中起作用但在PowerShell ISE中不起作用?

  9. 9

    为什么此Powershell功能更改目录不起作用?

  10. 10

    为什么在PowerShell中的.split对我不起作用?

  11. 11

    为什么此PowerShell别名不起作用?

  12. 12

    为什么这个 powershell 代码片段不起作用?

  13. 13

    为什么 PowerShell SetEnvironmentVariable 命令会删除现有变量?

  14. 14

    为什么我的程序从Powershell编辑中断到特定文件?

  15. 15

    为什么Awk弄乱了我的脚本变量

  16. 16

    为什么外部作用域变量没有正确地绑定到内部变量?

  17. 17

    为什么此New-Item命令在Powershell中而不在ps1脚本中起作用?

  18. 18

    为什么不将通知更新绑定到变量?

  19. 19

    在不继承变量和作用域的情况下从另一个运行一个PowerShell脚本

  20. 20

    为什么运行我的python脚本时powershell冻结了一段时间

  21. 21

    为什么Source Tree不能通过Git区分Powershell脚本(ps1)

  22. 22

    为什么从Powershell传递args会在脚本本身内部工作时出错

  23. 23

    为什么此Powershell脚本会提取意外文件以进行ipv4搜索?

  24. 24

    为什么命令行执行为Powershell中的脚本执行提供了不同的结果

  25. 25

    为什么在此PowerShell脚本中有这么多StringConstantExpressionAst?

  26. 26

    为什么我不能在批处理文件中运行此Powershell脚本?

  27. 27

    为什么运行我的python脚本时powershell冻结了一段时间

  28. 28

    为什么此Powershell脚本在根文件夹之外创建转换后的图像?

  29. 29

    为什么从Powershell传递args会在脚本本身内部工作时出错

热门标签

归档