我可以使用 PowerShell 1.0 列出进程及其 PID 和命令行吗?
OP 编辑: 我的问题预设 PowerShell 是完成这项工作的最佳工具。 有一种更简单的方法可以实现我的目标。 一位朋友刚刚告诉我: iisapp.vbs。 它准确地显示了我需要的信息,而不需要 PowerShell。
我正在处理本地运行的数十个 ASP.NET 网站,当我想要调试名为 foo.site.com 的特定网站时,我会执行以下步骤:
运行 Process Explorer(来自 SysInternals)并查找哪个 w3wp.exe 在其命令行上通过 foo.site.com 启动。
记下该 w3wp.exe 进程的进程 ID (PID)。
在 Visual Studio 中附加到该进程 ID。
有没有办法编写一个 PowerShell 脚本来打印我的计算机上运行的每个 w3wp.exe 进程的 PID 和命令行参数?
当我运行 get-process w3wp 时,我得到:
> get-process w3wp
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
688 28 44060 64576 226 2.75 196 w3wp
750 26 48328 68936 225 3.38 1640 w3wp
989 36 54596 83844 246 4.92 1660 w3wp
921 33 54344 80576 270 4.24 5624 w3wp
773 27 48808 72448 244 2.75 5992 w3wp
无命令行信息 :(
谢谢!
编辑:我正在寻找传递给 w3wp 的命令行参数。
EDIT by OP: My question presupposed that PowerShell was the best tool for this job. There is a simpler way of achieving my goal. A friend just told me about: iisapp.vbs. It displays exactly the info I need without requiring PowerShell.
I'm working with dozens of ASP.NET websites running locally and when I want to debug a particular website named, for example, foo.site.com I go through the following steps:
Run Process Explorer (from SysInternals) and find which w3wp.exe was started with foo.site.com on its command line.
Note the Process ID (PID) of that w3wp.exe process.
In Visual Studio attach to that process ID.
Is there a way to write a PowerShell script that will print the PID and Command Line Arguments of every w3wp.exe process running on my computer?
When I run get-process w3wp I get:
> get-process w3wp
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
688 28 44060 64576 226 2.75 196 w3wp
750 26 48328 68936 225 3.38 1640 w3wp
989 36 54596 83844 246 4.92 1660 w3wp
921 33 54344 80576 270 4.24 5624 w3wp
773 27 48808 72448 244 2.75 5992 w3wp
No Command Line information :(
Thanks!
EDIT: I am looking for the command line arguments that were passed to w3wp.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
gwmi win32_process -filter "name='w3wp.exe'" |
gwmi win32_process -filter "name='w3wp.exe'" | select name,processId,commandLine
它应该可以解决问题。 我觉得很奇怪,powershell 默认不提供命令行信息。 注意:我只在 powershell 2.0 中测试过它,但由于它使用 wmi,它应该可以在 1.0 中工作。
编辑:蒂姆·斯图尔特使用的最终版本(为了避免显示问题,请参阅评论):
gwmi win32_process -filter "name='powershell.exe'" |
gwmi win32_process -filter "name='powershell.exe'" | 格式表-自动调整名称、进程ID、命令行
gwmi win32_process -filter "name='w3wp.exe'" | select name,processId,commandLine
It should do the trick. I find it weird that powershell doesn't provide command line information by default. Note : I've only tested it in powershell 2.0, but as it use wmi, it should work in 1.0.
EDIT : the final version used by Tim Stewart (to avoid display problem, see comment) :
gwmi win32_process -filter "name='powershell.exe'" | format-table -autosize name,processId,commandLine
我的第一反应是使用 get-process 并查看 startinfo 属性:
不幸的是,这不起作用,因为 $_.StartInfo.Argments 始终为 null。 不过,WMI 可以工作。
My first instinct was to use get-process and look at the startinfo property:
Unfortunately, this doesn't work because $_.StartInfo.Argments is always null. WMI works, though.
这应该有效:
get-process | 格式表 ID、路径
This should work:
get-process | format-table Id,Path