如何获取任务管理器中显示的 运行 进程的进程 ID
how to get process id of a running process as shown in task manager
我正在学习 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,但任务管理器中显示的内容非常不同。
你能告诉我我做错了什么吗?
select 只是记事本进程的 pid :
Get-Process -Name chrome | select Id | Format-List
为了从你的工作中获得邮票 运行 它只是
Get-Job | select ID | Format-List
输出
Id : 2
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
。
我正在学习 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,但任务管理器中显示的内容非常不同。
你能告诉我我做错了什么吗?
select 只是记事本进程的 pid :
Get-Process -Name chrome | select Id | Format-List
为了从你的工作中获得邮票 运行 它只是
Get-Job | select ID | Format-List
输出
Id : 2
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
。