You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取PowerShell作业的进程句柄/PID?如何创建自定义命名测试进程?

问题解答

核心问题:从PowerShell作业获取进程ID

PowerShell作业的ChildJobs集合中包含对应后台进程的详细信息,直接通过$job.ChildJobs[0].InstanceId即可获取作业对应的进程ID,用进程ID过滤比句柄更准确。

修改后的示例代码:

$jobName = "TestJob"
$job = Start-Job -Name $jobName -ScriptBlock {
  while ($true) {
    Start-Sleep -Seconds 1
  }
}

# 获取作业对应的进程ID
$jobProcessId = $job.ChildJobs[0].InstanceId
# 匹配对应的进程
$jobProcess = Get-Process | Where-Object {$_.Id -eq $jobProcessId}

延伸问题:创建可自定义标识的进程用于测试

PowerShell作业本质是后台运行的powershell.exe(或pwsh.exe)进程,无法修改其进程名,但可以通过以下方式实现可识别的测试进程:

方法1:通过窗口标题标识进程

启动进程时指定自定义窗口标题,后续通过窗口标题过滤:

$processTitle = "test-Get-Foo.1.2"
# 启动后台运行的PowerShell进程并设置窗口标题
$proc = Start-Process powershell.exe -ArgumentList "-Command", "`$Host.UI.RawUI.WindowTitle='$processTitle'; while(`$true){Start-Sleep 2}" -WindowStyle Hidden -PassThru

# 后续通过窗口标题过滤进程
$targetProc = Get-Process powershell | Where-Object {$_.MainWindowTitle -eq $processTitle}

方法2:直接获取进程对象(无需事后过滤)

使用Start-Process的-PassThru参数,启动时直接拿到进程对象,无需后续匹配:

$proc = Start-Process powershell.exe -ArgumentList "-Command", "while(`$true){Start-Sleep 2}" -WindowStyle Hidden -PassThru

# 直接对$proc进行操作,例如停止进程:
# $proc | Stop-Process -Force

内容的提问来源于stack exchange,提问作者Chris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 08:20:11