通过 PSSessionConfiguration 文件获取 Enter-PSHostProcess 行为
Getting Enter-PSHostProcess behavior via PSSessionConfiguration file
场景:Windows 嵌入了 Powershell 主机的服务。单个运行空间在启动时分配。多dll解决方案。
要求:需要访问 .NET 类 inside 运行 服务。从使用
的本地 Powershell 实例
Enter-PSHostProcess -Name MyService
...正是我想要的,因为我可以访问 .NET 类。
[MyNameSpace.MyClass]::CallStaticFunction()
问题:如何使用对自定义端点的 Enter-PSSession 使远程端点可以使用此 Powershell 行为?从 Register-PSSessionConfiguration 我们可以指定一个 dll,但这会产生一个进程并且不会连接到 运行 实例。对通过 HTTPS 或命名管道编写代理不感兴趣,但使用 Powershell 中提供的本机功能来支持 .NET。
是否可以通过 PSSession 扩展它?还是我们只需要先执行 Enter-PSSession 或 Invoke-Command?
查看来源发现 Enter-PSHostProcess
和 Enter-PSSession
是非常独立的机制。 Enter-PSHostProcess
通过命名管道进行通信,而 Enter-PSSession
使用 WinRM(它有效地通过端口 5985/5986 使用 http(s)。我认为您不需要 Enter-PSSession
或 Invoke-Command
如果你想通过 Enter-PSHostProcess
.
交互访问本地服务进程
你可能已经这样做了,但为了尝试这个,我启动了 Powershell.exe 和 Powershell_ise.exe,然后从前者使用这个命令连接到后者:
get-process Powershell_ise | Enter-PSHostProcess
并且提示更改为包括 ISE 的 PID。为了确保静态方法按您的预期工作,我使用以下命令从 Powershell.exe 命令行终止了 ISE:
[System.Environment]::exit(0)
Powershell 使用线程的默认安全描述符创建连接到的命名管道,通常只允许访问本地系统、管理员和进程所在的帐户 运行。我的测试成功了,因为两个进程都 运行 在同一个帐户下(我不需要管理员权限。)
但是要明确一点,Enter-PSHostProcess
没有规定连接到另一台机器上的进程。可能会进行双跳,首先使用 Enter-PSSession
连接到机器,然后使用 Enter-PSHostProcess
连接到进程。
场景:Windows 嵌入了 Powershell 主机的服务。单个运行空间在启动时分配。多dll解决方案。
要求:需要访问 .NET 类 inside 运行 服务。从使用
的本地 Powershell 实例Enter-PSHostProcess -Name MyService
...正是我想要的,因为我可以访问 .NET 类。
[MyNameSpace.MyClass]::CallStaticFunction()
问题:如何使用对自定义端点的 Enter-PSSession 使远程端点可以使用此 Powershell 行为?从 Register-PSSessionConfiguration 我们可以指定一个 dll,但这会产生一个进程并且不会连接到 运行 实例。对通过 HTTPS 或命名管道编写代理不感兴趣,但使用 Powershell 中提供的本机功能来支持 .NET。
是否可以通过 PSSession 扩展它?还是我们只需要先执行 Enter-PSSession 或 Invoke-Command?
查看来源发现 Enter-PSHostProcess
和 Enter-PSSession
是非常独立的机制。 Enter-PSHostProcess
通过命名管道进行通信,而 Enter-PSSession
使用 WinRM(它有效地通过端口 5985/5986 使用 http(s)。我认为您不需要 Enter-PSSession
或 Invoke-Command
如果你想通过 Enter-PSHostProcess
.
你可能已经这样做了,但为了尝试这个,我启动了 Powershell.exe 和 Powershell_ise.exe,然后从前者使用这个命令连接到后者:
get-process Powershell_ise | Enter-PSHostProcess
并且提示更改为包括 ISE 的 PID。为了确保静态方法按您的预期工作,我使用以下命令从 Powershell.exe 命令行终止了 ISE:
[System.Environment]::exit(0)
Powershell 使用线程的默认安全描述符创建连接到的命名管道,通常只允许访问本地系统、管理员和进程所在的帐户 运行。我的测试成功了,因为两个进程都 运行 在同一个帐户下(我不需要管理员权限。)
但是要明确一点,Enter-PSHostProcess
没有规定连接到另一台机器上的进程。可能会进行双跳,首先使用 Enter-PSSession
连接到机器,然后使用 Enter-PSHostProcess
连接到进程。