如何在PowerShell中检索某些进程中的命令行

rggaifut  于 12个月前  发布在  Shell
关注(0)|答案(2)|浏览(146)

使用下面的代码,我可以通过传递PID来获得进程的CommandLine

Get-CimInstance -ClassName Win32_Process -Filter "ProcessId = '11132'" | Select Name,ProcessId,CommandLine

字符串


的数据

Get-CimInstance -ClassName Win32_Process -Filter "ProcessId = '8260'" | Select Name,ProcessId,CommandLine


Get-CimInstance -ClassName Win32_Process -Filter "ProcessId = '9308'" | Select Name,ProcessId,CommandLine


但是相同的命令在某些进程中没有返回CommandLine,如下所示:

Get-CimInstance -ClassName Win32_Process -Filter "ProcessId = '4208'" | Select Name,ProcessId,CommandLine


Get-CimInstance -ClassName Win32_Process -Filter "ProcessId = '3944'" | Select Name,ProcessId,CommandLine



我该如何解决此问题?

hgc7kmma

hgc7kmma1#

  • 如果存在 * permission-related * 无法检索某些进程的命令行,Get-CimInstanceWin32_Process * 会悄悄忽略 * 失败,导致.CommandLine属性包含$null
  • PowerShell (Core) 7+中,这同样适用于Get-Process输出的对象的.CommandLine属性(此属性在 Windows PowerShell 中不可用)。
  • 因此,为了能够查询尽可能多的进程命令行,请从 * 提升的 *(run-as-admin)会话运行Get-CimInstance调用。
  • 然而,**即使是这样,少数 * -可能是 * 系统拥有的 * -进程也不能 * 被查询,无论是从它们的 * 命令行 * 还是从它们的 * 用户 *(拥有该进程的用户帐户的身份)的Angular 来看,Get-Process允许您通过其-IncludeUserName开关请求。
  • 要查找这些进程,请运行以下命令 * 从提升的会话 *:
Get-CimInstance Win32_Process | Where-Object { -not $_.CommandLine }

字符串
由于您的问题中显示的两个服务流程不是系统服务,因此我希望以下内容 * 在使用elevation* 运行时可以工作:

#requires -RunAsAdministrator

Get-CimInstance Win32_Process -Filter 'Name = "TeamViewer_Service.exe" OR Name = "ErgonomicKBNotificationService.exe"' | 
  Select-Object ProcessId, Name, CommandLine

qij5mzcb

qij5mzcb2#

你检查过这个PID是否有命令行吗?有些任务就是没有:

相关问题