从我拥有ProcessID的Process获取ParentProcessID时遇到了问题。我这样尝试过,这就是它对ProcessID的作用:
$p = Get-Process firefox
$p.Id
但是如果我使用ParentProcessID尝试它,它就不起作用:
$p.ParentProcessId
有没有办法通过ProcessID获取ParentProcessID?
答案 0 :(得分:8)
如评论中所述,从Get-Process
(System.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