gpt4 book ai didi

powershell - 在 PowerShell 中使用命名空间的范围是什么?

转载 作者:行者123 更新时间:2023-12-04 08:17:39 26 4
gpt4 key购买 nike

指定 using namespace 时在 PowerShell 模块或脚本文件中,是否存在与正在引入命名空间符号的指令关联的范围?
还是将命名空间符号引入全局 session 状态以避免 PS 范围修饰符?

using namespace System.Management.Automation.Runspaces
例如,如果我们指定 using namespace在模块内部,如果这仅适用于模块范围,那就太好了。
同样,如果我们指定 using namespace在脚本文件中,如果这仅适用于该脚本,除非点源。
我没有对此进行任何测试,也无法找到有关此问题的文档。

最佳答案

一个 using namespace声明遵循 PowerShell 通常的动态范围规则[1]:

  • 它在它所在的作用域和所有后代作用域中生效。
  • 如果脚本文件 ( *.ps1 ) 是 dot-sourced (例如 . ./file.ps1 ),该语句在调用者的范围内生效。

  • 由于模块有自己的作用域域(“ session 状态”),它们只连接到全局作用域,using namespace模块中的语句不会影响任何模块外部调用者。
  • 警告 : 从 PowerShell 7.1 开始,您不能使用依赖于 using namespace 的纯名称类型文字。 [Command] 中的语句(例如 [System.Management.Automation.Runspaces.Command] 用于 [OutputType([...])] )导出函数的属性(它们在参数声明和函数体中工作正常),如您发现的 GitHub 问题中所述,GitHub issue #13768 .


  • [1] 在撰写本文时,概念 about_Scopes帮助主题没有明确讨论 PowerShell 范围的动态特性(与 C# 等语言中的词法范围不同)。简单来说,PowerShell 的动态作用域意味着,在给定范围域内(非模块代码与给定模块代码),从给定调用者调用的代码会受到该调用者运行时状态的影响,例如受 using 影响。声明, Set-StrictMode设置,以及调用者变量的可见性。

    关于powershell - 在 PowerShell 中使用命名空间的范围是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65645394/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com