powershell和模块

时间:2013-01-13 15:18:09

标签: powershell

我想知道powershell如何处理PowerShell模块 - 我一直在阅读关于AppDomain,PSSession,Runspace的内容,我想知道powershell导入模块的时候,是否在相同的AppDomain中加载模块,同样的运行空间?

我知道如果你把C#代码放在powershell中,c#代码将被编译并加载到同一个AppDomain中。但是我找不到关于Powershell模块的相关信息..

- 编辑 -

我只是使用

运行一些测试
[System.AppDomain]::CurrentDomain.FriendlyName

它显示模块加载在同一个AppDomain中。但我还是不知道PSSession ..

1 个答案:

答案 0 :(得分:4)

如果要查找加载了哪些模块,请执行Get-Module。但是不要将PowerShell模块与ProcessModule(.dll)混淆。如果流程模块是二进制PowerShell模块或PSSnapin的一部分,则流程模块可能与PowerShell相关。 OTOH PowerShell模块可以(通常是)只是一个PSM1文件 - 根本没有dll。

AppDomain是一种非常广泛的.NET概念,适用于所有.NET进程。 PowerShell具有Runspaces,这是管道运行会话状态的环境(全局变量,提供者状态等)。通常,每个PowerShell进程都会获得一个Runspace,但在PowerShell_ISE的情况下,它可以有多个运行空间(每个PowerShell选项卡一个)。您可以通过以下方式看到这一点:

PS> $ExecutionContext.Host.Runspace


Events                 : System.Management.Automation.PSLocalEventManager
ThreadOptions          : ReuseThread
JobManager             : System.Management.Automation.JobManager
RunspaceConfiguration  :
InitialSessionState    : System.Management.Automation.Runspaces.InitialSessionState
Version                : 3.0
RunspaceStateInfo      : Opened
RunspaceAvailability   : Busy
ConnectionInfo         :
OriginalConnectionInfo :
LanguageMode           : FullLanguage
ApartmentState         : STA
InstanceId             : b80ae2aa-a70b-43b2-a63f-def6c92fd032
SessionStateProxy      : System.Management.Automation.Runspaces.SessionStateProxy
Debugger               : System.Management.Automation.Debugger

请注意,InsthellId在PowerShell提示符中通常是相同的。例外是在不同的运行空间(通常是不同的进程)中运行的作业,事件处理程序和工作流。

PSSession是一种有点不同的野兽,用于指定远程计算机的持久远程会话。