假设我像这样启动一个 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)。
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 可以被回收。理论上,您最终可能会得到所有以记事本作为父进程的进程树。
| 归档时间: |
|
| 查看次数: |
7213 次 |
| 最近记录: |