我想知道powershell如何处理PowerShell模块 - 我一直在阅读关于AppDomain,PSSession,Runspace的内容,我想知道powershell导入模块的时候,是否在相同的AppDomain中加载模块,同样的运行空间?
我知道如果你把C#代码放在powershell中,c#代码将被编译并加载到同一个AppDomain中。但是我找不到关于Powershell模块的相关信息..
- 编辑 -
我只是使用
运行一些测试[System.AppDomain]::CurrentDomain.FriendlyName
它显示模块加载在同一个AppDomain中。但我还是不知道PSSession ..
答案 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是一种有点不同的野兽,用于指定远程计算机的持久远程会话。