在数据库上,我可以获得所有当前正在运行的进程的列表,以及启动它们的 sql 命令。
我想在 Windows 盒子上做类似的事情。
我可以获取进程列表,但不能获取启动它们的命令行。
我的问题是:给定 Windows 上的 PID - 我如何找到执行它的命令行指令?
假设:
- Windows 7 和等效服务器
在数据库上,我可以获得所有当前正在运行的进程的列表,以及启动它们的 sql 命令。
我想在 Windows 盒子上做类似的事情。
我可以获取进程列表,但不能获取启动它们的命令行。
我的问题是:给定 Windows 上的 PID - 我如何找到执行它的命令行指令?
假设:
Powershell 和 WMI。
或者
请注意,您必须有权访问有关进程的此信息。因此,如果您想了解的进程在特权上下文中运行,您可能必须以管理员身份运行该命令。
您可以使用 WMI 子系统,使用 WMIC.EXE 来获取此信息。假设 PID 为 600:
您还可以搜索名称或进程的其他特征。使用此命令列出所有属性:
其他答案当然是不错的选择,由于它们的命令行性质,它们可以在自动化系统中为您提供良好的服务(我从标签中看到这就是您想要的)。当然,有些人可能想用 GUI 探索这种信息,所以这里有一个替代方案。
Process Explorer 是 Microsoft 维护的 Sysinternals 工具。它可以在进程的属性对话框中显示进程的命令行以及启动它的父进程,尽管该进程的名称可能不再可用。这是进程属性对话框:
如果您想要更详细地了解进程何时启动以及在什么条件下启动的审计跟踪,您可以求助于另一个名为 Process Monitor 的 Sysinternals 工具。在这里,您可以过滤“流程启动”事件,了解流程启动的环境,并查看当时发生的其他事件。这是一个相当强大的程序。这是事件属性对话框:
为了补充Ryan Ries 有用的 PowerShell 答案,通过参数代替deprecated-since-v3 cmdlet使用更短的替代方案
-Filter
。Get-CimInstance
Get-WmiObject
该
-Filter
参数本质上允许您传递WQL语句的WHERE
子句,而不是通过.-Query