powershell - Scope vs Runspace vs Session vs AppDomain

标签 powershell session appdomain runspace

我正在努力为 PowerShell 划定界限。我非常有限的理解是这样的:

  • 范围包含用户/脚本定义的变量和函数,并且可以存在具有 PS 调用堆栈的范围层次结构。
  • 运行空间规定了给定 PS 实例可以访问的内置功能。运行空间可以跨越网络边界。
  • session 是 Powershell 的特定实例。这些也可以跨越网络边界。
  • 应用程序域(或 AppDomain)包含已加载的程序集。在许多情况下,一旦数据被加载到 AppDomain 中,就无法卸载。必须将 AppDomain 弃置以换取新的。如果 PS 脚本通过另一个应用程序调用,则创建的 PS 实例会继承调用应用程序的 AppDomain。

  • 谁能更好地解释这些概念?是否有某种维恩图或某种可以充实这些信息的东西?在线文档并不是很有帮助。

    最佳答案

    考虑这些的最方便的方法是与您列出它们的方式相反:

    全部 AppDomain实例由 .NET 公共(public)语言运行时 (CLR) 托管在 Windows 进程内。一个 AppDomain就像一个 Windows 进程,因为它是一个安全边界。一般来说,一个应用程序域中的代码不允许直接跨到不同的应用程序域。

    Windows PowerShell 运行空间是实际创建 PowerShell 运行时的位置。它提供了一些核心基础设施,例如管道的创建。这是一个 .NET 对象,它继承父应用程序域。它确实具有远程处理功能,但它们与 .NET Framework 本质上提供的任何东西都没有真正的关系。相反,远程处理功能由 Windows PowerShell 产品基础结构提供。

    单个运行空间可以是多个 session 的主机。 session 实例可以作为纯本地结构存在于本地机器上,也可以存在于网络的其他地方。当针对远程 session 发出命令时,命令本身会被发送到远程托管服务提供商、执行,并将整个管道的结果返回给原始请求者。

    有几个不同的范围,它们本质上是分层的。有顶级作用域、函数作用域、模块作用域、脚本作用域等。当作用域之间发生命名冲突时,最本地的作用域胜出。范围还使您能够隐藏数据,如果您正在构建模块,这是一个非常有用的功能。任何范围都可以通过名称以及变量名来访问。 $script:myVar 就是一个例子。 .

    关于powershell - Scope vs Runspace vs Session vs AppDomain,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41728080/

    相关文章:

    c# - 是什么触发了早期 session 超时

    iframe - 当我更改 GWT 应用程序的 html 文件中的 document.domain 属性时,出现空白页

    c# - 卸载 AppDomain 后删除 dll 文件

    c# - 从不同的应用程序域(复合 UI)获取对 UserControl 的引用

    powershell - 通过 PowerShell 列出所有反病毒软件

    java - 如何在 JSP 中访问 session 属性 ArrayList<objects> 中的元素

    windows - 术语 'node' 无法识别...在 Powershell 中

    javascript - 在 session ID 上下文中使用 javascript 登录

    azure - 如何使用服务主体连接到 Azure?

    powershell - 给定进程 ID 在 PowerShell 中终止进程树