3

场景:其中嵌入了 Powershell 主机的 Windows 服务。单个运行空间在启动时分配。多dll解决方案。

要求:需要访问正在运行的服务中的 .NET 类。从本地 Powershell 实例使用

Enter-PSHostProcess -Name MyService 

...因为我可以访问 .NET 类,所以正是我想要的。

[MyNameSpace.MyClass]::CallStaticFunction()

问题:如何使用 Enter-PSSession 将这种 Powershell 行为提供给远程端点到自定义端点?从 Register-PSSessionConfiguration 我们可以指定一个 dll,但这会产生一个进程并且不会连接到正在运行的实例。对通过 HTTPS 或命名管道编写代理不感兴趣,但使用 Powershell 中提供的本机功能来支持 .NET。

是否可以通过 PSSessions 扩展它?还是我们只需要先执行 Enter-PSSession 或 Invoke-Command?

4

1 回答 1

4

审查来源似乎是非常独立的机制 Enter-PSHostProcess。通过命名管道进行通信,同时使用 WinRM(它有效地通过端口 5985/5986 使用 http(s)。我认为您不需要或者如果您希望通过.Enter-PSSessionEnter-PSHostProcessEnter-PSSessionEnter-PSSessionInvoke-CommandEnter-PSHostProcess

您可能已经这样做了,但为了尝试一下,我同时启动了 Powershell.exe 和 Powershell_ise.exe,然后从前者使用此命令连接到后者:

get-process Powershell_ise | Enter-PSHostProcess

并且提示更改为包括 ISE 的 PID。为了确保静态方法按预期工作,我使用以下命令从 Powershell.exe 命令行中杀死了 ISE:

[System.Environment]::exit(0)

Powershell 使用线程的默认安全描述符创建命名管道,它通常只允许访问 LocalSystem、Administrators 和运行进程的帐户。我的测试有效,因为两个进程都在同一个帐户下运行(我不需要管理员权限。)

然而,需要明确的是,Enter-PSHostProcess没有为连接到另一台机器上的进程做任何准备。可以进行双跳,首先使用 连接到机器Enter-PSSession,然后使用 连接到进程Enter-PSHostProcess

于 2016-09-13T22:01:12.697 回答