gpt4 book ai didi

windows - 如何获取正在运行的进程的进程 ID,如任务管理器中所示

转载 作者:可可西里 更新时间:2023-11-01 11:18:01 24 4
gpt4 key购买 nike

我正在学习 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,但任务管理器中显示的内容非常不同。

你能告诉我我做错了什么吗?

最佳答案

PID 与 ID

您将在 $processes 中获得您期望的 PID。这里的问题是,您正在查看 Start-Job 的输出,并将其 Job ID 与您的 PID 输出混淆。

您的示例中运行了 2 个 notepad.exe,因此 PowerShell 按要求运行了 2 个作业。 ID 5052 只是分配给作业的 ID。要获得您正在寻找的输出,您首先需要捕获它。

如果在脚本末尾放置 Get-Job | Receive-Job 你会看到你期望的 PID。有关工作和工作产出的更多阅读,您可以在 TechNet 上找到一篇很棒的文章

然而

为什么要使用 Start-Job?这部分是一个更大的剧本吗?你应该只能使用 Invoke-Command将脚本 block $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

关于windows - 如何获取正在运行的进程的进程 ID,如任务管理器中所示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29308385/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com