Powershell如何通过ProcessID获取ParentProcessID

时间:2015-11-25 08:09:51

标签: powershell

从我拥有ProcessID的Process获取ParentProcessID时遇到了问题。我这样尝试过,这就是它对ProcessID的作用:

$p = Get-Process firefox
$p.Id

但是如果我使用ParentProcessID尝试它,它就不起作用:

$p.ParentProcessId

有没有办法通过ProcessID获取ParentProcessID?

4 个答案:

答案 0 :(得分:8)

如评论中所述,从Get-ProcessSystem.Diagnostics.Process)返回的对象不包含父进程ID。

要实现这一点,您需要检索Win32_Process类的实例:

PS C:\> $ParentProcessIds = Get-CimInstance -Class Win32_Process -Filter "Name = 'firefox.exe'"
PS C:\> $ParentProcessIds[0].ParentProcessId
3816

答案 1 :(得分:1)

这对我有用:

$p = Get-Process firefox
$parent = (gwmi win32_process | ? processid -eq  $p.Id).parentprocessid
$parent

输出如下:

1596

1596是匹配的ParentProcessID,我已经使用ProcessExplorer对其进行了检查。

答案 2 :(得分:1)

我想获取当前正在运行的 PS 进程的 PPID,而不是按名称查找的另一个进程。以下对我回到 PS v2 有用。 (我没有测试 v1...)

$PPID = (gwmi win32_process -Filter "processid='$PID'").ParentProcessId
Write-Host "PID: $PID"
Write-Host "PPID: $PPID"

答案 3 :(得分:0)

在PowerShell Core中,由Process cmdlet返回的Get-Process对象包含一个Parent属性,该属性为您提供了用于父进程的相应Process对象。

示例:

> $p = Get-Process firefox
> $p.Parent.Id