【问题标题】:List in powershell processes that do not have services and their PID's列出没有服务及其 PID 的 powershell 进程
【发布时间】:2018-05-02 18:34:55
【问题描述】:

您能帮我列出没有服务的 PowerShell 进程及其 PID 吗?

我无法使用N/A服务列出所有这些进程,我尝试了一些命令,但没有成功:

Get-process | where-services {$_.Status -eq "N/A"}
Get-process | sort-object {$_.Status -eq "N/A"}
tasklist /svc /FI "SERVICES ne N/A"
tasklist /v /FI "SERVICES ne N/A"

谢谢你,

【问题讨论】:

  • 你能提供你到目前为止所尝试的吗?
  • 您没有显示任何您自己的代码或任何您尝试研究/搜索解决方案的迹象。我建议您阅读How to Ask,因为目前您的问题缺少提问时所期望的基础知识。在您展示基础知识之前,您的问题可能会被否决并关闭。
  • 除了缺少代码之外,我还不清楚您的问题。 “没有服务”是什么意思?
  • 我无法列出所有具有 N/A 服务的进程。我尝试了一些命令,但没有成功:Get-process | where-services {$_.Status -eq "N/A"} // 获取进程 | sort-object {$_.Status -eq "N/A"} // 任务列表 /svc /FI "SERVICES ne N/A" // 任务列表 /v /FI "SERVICES ne N/A"
  • 我们有代码!当您提出问题时,请务必包含它 - 即使它不起作用,它仍然可以帮助我们理解您要做什么:)

标签: powershell


【解决方案1】:

很遗憾,Get-Service 没有返回服务运行的进程的进程 ID 信息。但是,您可以通过具有 ProcessId 属性的 WMI Win32_Service 类获取该信息:

$ServicePids = (Get-Wmiobject win32_service).ProcessId | Sort-Object -Unique
$ProcessPids = (Get-Process).Id | Sort-Object -Unique

$Pids = Compare-Object $ServicePids $ProcessPids -PassThru

Get-Process -Id $Pids | Select Name,Id

您可以使用Get-Process 获取进程的ID,然后使用Compare-Object 进行比较。 -Passthru 开关只返回 Pid 值(而不是比较对象)。

我还使用Sort-Object -Unique 将两个列表缩减为已排序的唯一列表,以便它们进行正确比较。

最后,如果您希望输出类似于tasklist /svc,您可以再次使用Get-Process 来返回结果ID 的对象,我们将其返回给$Pids。我已经使用 Select cmdlet 将其过滤到仅 Name 和 Id 字段,但您显然可以将其修改为您需要的任何内容。

【讨论】:

  • 感谢您的帮助,非常感谢。我已经尝试过了,但它似乎不起作用。问题的想法是输出与您从 tasklist /svc 收到的输出相似,但它应仅列出“服务”选项卡下具有 N/A 的那些进程(没有服务的进程 - N/A) .
  • 我已经更新了我的答案。我认为您只需再次使用 Get-Process 和生成的 Pid 列表即可获得所需的输出。可以用更少的步骤完成所有这些操作,但我已经将其布局以最大限度地提高可读性/理解性。
  • 再次感谢,感谢您的帮助。对不起,但它仍然不起作用。您能否告知另一种选择是什么(步骤较少的那个)?最近几天我一直在尝试解决这个问题,但没有成功。
  • 在什么情况下不起作用?也许我可以帮助您调试出了什么问题。
  • $Pids = Compare-Object $ServicePids $ProcessPids -PassThru后报错//提示参数为null。
猜你喜欢
  • 2010-11-05
  • 1970-01-01
  • 2016-06-25
  • 1970-01-01
  • 2021-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多