动机:我正在尝试使用简单的 powershell 作业测试一些与进程相关的命令。但是,所有 powershell 作业在进程表中都被命名为“powershell”。所以我需要可以用来过滤输出的进程句柄Get-Process
。
因此,“更大”的问题可能更容易回答,但就目前情况而言,我认为只要我能够将 powershell 作业连接到其进程 ID(“句柄”),我就有一个解决方案。
如何从 powershell 作业获取进程 ID?(这不是 JobID)。
$job = Start-Job -Name $jobName -ScriptBlock { while($true){sleep -Seconds 1}}
$processes = Get-Process
$jobHandle = ???
$jobProcess = $processes |? {$_.Handle -eq $jobHandle}
如何获取以“???”表示的缺失信息 ?
处理 XY 问题并更一般地说,如果这是不可能的,因为所有内容都被继承到当前的 powershell 会话中,那么更大的问题是:如何创建一个任意命名或处理的进程,我可以从 powershell 执行任何操作,例如测试?
# how do I start this code block as an arbitrary named process?
name="test-Get-Foo.1.2"
{
while($true){
sleep -Seconds 2
}
}
# ???
$proc=Get-Process |? {$_.Name -like "test-Get-Foo*"}
关于第一个问题,据我所知,该类
Job
不会公开幕后产生的底层进程,而获得它的方法ProcessId
是进行前后比较:关于第二个问题,解释一下:
为此,您可以使用
NamedPipeConnectionInfo
Class。一个简单的例子: