如何获取正在运行的进程的进程ID,如任务管理器中所示
Posted
技术标签:
【中文标题】如何获取正在运行的进程的进程ID,如任务管理器中所示【英文标题】:how to get process id of a running process as shown in task manager 【发布时间】:2015-03-27 19:06:54 【问题描述】:我正在学习 powershell,并试图了解如何使用变量和函数。我想打印出所有正在运行的记事本实例的 PID,基本上是在任务管理器的详细信息选项卡下的 PID 列中显示的内容。我写了以下代码
$cmd =
param($abc)
Write-Host $abc
$processes = Get-Process -Name notepad | Select -ExpandProperty ID
foreach ($process in $processes)
Start-Job -ScriptBlock $cmd -ArgumentList $process
我得到以下结果。
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
50 Job50 BackgroundJob Running True localhost ...
52 Job52 BackgroundJob Running True localhost ...
这里有两个问题。 1.我只想要PID,它有很多。 2. 我希望上面输出中的 Id 是 PID,但在任务管理器中显示的是非常不同的。
你能告诉我我做错了什么吗?
【问题讨论】:
【参考方案1】:PID 与 ID
您在$processes
中获得了您所期望的PID。这里的问题是您看到来自 Start-Job
的输出并将其 Job ID 与您的 PID 输出混淆。
您的示例中运行了 2 个 notepad.exe,因此 PowerShell 根据要求运行 2 个作业。 ID 50
和 52
只是分配给作业的 ID。要获得您正在寻找的输出,您首先需要捕获它。
如果您在脚本末尾输入Get-Job | Receive-Job
,您会看到您所期望的PID。有关工作和工作输出的更多信息,您可以在 TechNet 上找到一篇很棒的文章
然而
你为什么使用Start-Job
?这部分是一个更大的脚本吗?您应该可以使用Invoke-Command
将脚本块$cmd
传递给它。
$cmd =
param($abc)
Write-Host $abc
$processes = Get-Process -Name notepad | Select -ExpandProperty ID
foreach ($process in $processes)
Invoke-Command -ScriptBlock $cmd -ArgumentList $process
警告
虽然这在 PowerShell 5.0 中不是问题,但您在示例中使用 Write-Host
进行输出。如果您需要在另一个函数中使用该输出,您应该考虑改为调用Write-Output
。
【讨论】:
我改变了答案 tnx 我更喜欢 Start-Job 的解决方案,因为我计划在 $cmd 中添加一些长时间运行的作业。您能否将您的答案更新为如何使用 Jobs 来做到这一点 @pauldeter 没有问题,这在我对Get-Job | Receive-Job
的回答中有所提及。还有其他方法可以处理工作输出,这是您的下一个研究任务:)。
@Matt 您的答案是使用 Invoke-Command。您可以使用 Start-Job 更新它吗?我不确定如何在这里使用 Get-Job。
@pauldeter 这是“但是”上方的行,您可以将其作为最后一行。我的回答旨在满足您的需求并提供替代解决方案。【参考方案2】:
只为记事本进程选择 pid:
Get-Process -Name chrome | select Id | Format-List
为了从你的工作中获得印章,只需运行它
Get-Job | select ID | Format-List
输出
Id : 2
【讨论】:
我想你可能误解了。作业 ID 和进程 ID 之间没有关联。 @Matt 当我从任务管理器中选择进程标识符时显示,并且我看到 pid 与来自 `Get-Process -Name chrome | 的 Id 结果没有区别选择 ID | Format-List` 不正确? 请看我的回答。我想我知道混乱是什么。以上是关于如何获取正在运行的进程的进程ID,如任务管理器中所示的主要内容,如果未能解决你的问题,请参考以下文章