给定 Windows 上的 PID - 如何找到执行它的命令行指令?

Haw*_*eye 30 windows windows-command-prompt pid

在数据库上,我可以获得所有当前正在运行的进程的列表,以及启动它们的 sql 命令。

我想在 windows box 上做类似的事情。

我可以获取进程列表,但不能获取启动它们的命令行。

我的问题是:给定 Windows 上的 PID - 如何找到执行它的命令行指令?

假设:

  • Windows 7 和同等服务器

Rya*_*ies 40

Powershell 和 WMI。

Get-WmiObject Win32_Process | Select ProcessId,CommandLine
Run Code Online (Sandbox Code Playgroud)

或者

Get-WmiObject -Query "SELECT CommandLine FROM Win32_Process WHERE ProcessID = 3352"
Run Code Online (Sandbox Code Playgroud)

请注意,您必须有权访问有关进程的此信息。因此,如果您想了解的进程在特权上下文中运行,则您可能必须以管理员身份运行该命令。

  • Get-process 使用没有该属性的 system.diagnostics.process 类。get-process 的帮助也有使用wmi 获取进程对象的例子 (3认同)
  • 值得注意的是,[没有官方支持](http://blogs.msdn.com/b/oldnewthing/archive/2009/02/23/9440784.aspx) 获取另一个进程的命令行的方法。虽然[有一些方法](http://blogs.msdn.com/b/oldnewthing/archive/2009/11/25/9928372.aspx) 来获得一个*可能*是命令行的字符串,但不能保证众所周知,操作系统和结果可能是“鸡鸡鸡”。 (2认同)

Rob*_*obW 21

您可以使用 WMI 子系统,使用 WMIC.EXE 来获取此信息。假设 PID 为 600:

wmic.exe path Win32_Process where handle='600' get name, commandline  /format:list
Run Code Online (Sandbox Code Playgroud)

您还可以搜索进程的名称或其他特征。使用此命令列出所有属性:

wmic.exe path Win32_Process get  /format:list
Run Code Online (Sandbox Code Playgroud)


小智 16

其他答案当然是不错的选择,由于它们的命令行性质,它们将在自动化系统中为您提供良好的服务(我从标签中看到这正是您想要的)。当然,有些人可能想用 GUI 探索这类信息,所以这里有一个替代方案。

Process Explorer 是 Microsoft 维护的 Sysinternals 工具。它可以在进程的属性对话框以及启动它的父进程中显示进程的命令行,尽管该进程的名称可能不再可用。这是进程属性对话框:

进程属性对话框

如果您想获得有关进程何时启动以及在何种条件下启动的更详细的审计跟踪,您可以求助于另一个名为 Process Monitor 的 Sysinternals 工具。在这里,您可以过滤“流程启动”事件,了解流程启动的环境,并查看当时发生的其他事件。这是一个非常强大的程序。这是事件属性对话框:

事件属性对话框

  • 或者只是更改任务管理器上的列以显示 PID 和“命令行”。并做了。 (10认同)