powershell,如何获取仅给定父进程ID的子进程ID

pic*_*ico 5 powershell

假设我像这样启动一个 powershell 进程:

    $procid = start-process -FilePath powershell _
       -ArgumentList ping, -t, localhost
Run Code Online (Sandbox Code Playgroud)

仅给出 powershell 的进程 ID,如何获取“ping”的进程 ID,即。$procid?

因为,我在脚本中只有 $procid,并且需要找到子进程的 procid。

在此输入图像描述

这里可以看到powershell的pid为3328,我需要使用3328来查询powershell才能找到id:7236(Ping.exe)。

Lie*_*ers 7

cudo 到 mklement0 和 Nordmanden

您可以使用 CIM cmdlet 过滤给定进程的 ParentProcessId 并在递归函数中使用它来获取整个树

function Get-ChildProcesses ($ParentProcessId) {
    $filter = "parentprocessid = '$($ParentProcessId)'"
    Get-CIMInstance -ClassName win32_process -filter $filter | Foreach-Object {
            $_
            if ($_.ParentProcessId -ne $_.ProcessId) {
                Get-ChildProcesses $_.ProcessId
            }
        }
}
Run Code Online (Sandbox Code Playgroud)

像这样调用

Get-ChildProcesses 4 | Select ProcessId, Name, ParentProcessId
Run Code Online (Sandbox Code Playgroud)

请注意,进程可以终止(由用户、崩溃、完成等),并且 ID 可以被回收。理论上,您最终可能会得到所有以记事本作为父进程的进程树。