可以从 Windows PowerShell 在已运行的远程 PowerShell 进程中创建新的 PowerShell 类实例吗?

问题描述 投票:0回答:1

通过连接到已运行的 PowerShell 进程可以完成一些有用的事情。 例如,这个答案使用该技术通过允许运行空间首先完成清理来优雅地停止目标 PowerShell 进程。 没有任何明显的停止进程的方法可以实现如此优雅的关闭。

该解决方案是通过在目标进程中创建运行空间和 powershell 类实例来实现的:

$pipe = [Runspaces.NamedPipeConnectionInfo]::new($Process.Id)
$rs = [runspacefactory]::CreateRunspace($pipe)
$rs.Open()
$ps = [powershell]::Create($rs)

该片段依赖于

PowerShell.Create(Runspace)
。 但是,该重载在 Windows PowerShell SDK 中不可用

我对 PowerShell 远程处理和运行空间不太熟悉,也没有发现使用 Windows PowerShell 完成类似任务的明显方法。 是否可以?如果是的话,怎么办?

windows powershell runspace
1个回答
0
投票

您已经注意到,PowerShell 7 中添加了

.Create(Runspace)
重载,但这对于 Windows PowerShell 5.1 来说不是问题,您只需将创建的运行空间分配给
.Runspace
属性
:

# try from PowerShell 5.1
$proc = Start-Process pwsh -PassThru
$pipe = [System.Management.Automation.Runspaces.NamedPipeConnectionInfo]::new($proc.Id)
$rs = [runspacefactory]::CreateRunspace($pipe)
$rs.Open()
$ps = [powershell]::Create().AddScript('$PSVersionTable.PSVersion')
$ps.Runspace = $rs
$ps.Invoke()
$proc.Kill()
© www.soinside.com 2019 - 2024. All rights reserved.