OP编辑:我的问题预先假定PowerShell是这项工作的最佳工具。有一种更简单的方法来实现我的目标。一位朋友告诉我:iisapp.vbs。它显示我需要的信息而无需PowerShell。
我正在使用本地运行的数十个ASP.NET网站,当我想调试一个名为foo.site.com的特定网站时,我会执行以下步骤:
运行Process Explorer(来自SysInternals),并在命令行中找到使用foo.site.com启动的w3wp.exe。
请注意该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的命令行参数。
答案 0 :(得分:12)
gwmi win32_process -filter "name='w3wp.exe'" | select name,processId,commandLine
它应该做的伎俩。我觉得很奇怪PowerShell默认不提供命令行信息。注意:我只在powershell 2.0中测试过,但是因为它使用wmi,它应该在1.0中工作。
编辑:Tim Stewart使用的最终版本(为了避免显示问题,请参阅注释):gwmi win32_process -filter "name='powershell.exe'" | format-table -autosize name,processId,commandLine
答案 1 :(得分:2)
我的第一直觉是使用get-process并查看startinfo属性:
get-process w3wp | select-object id, path, @{Name="Args";Expression = {$_.StartInfo.Arguments}}
不幸的是,这不起作用,因为$ _。StartInfo.Argments始终为null。不过WMI很有用。
get-wmiobject win32_process -filter "name='w3wp.exe'" | select-object processid, commandline
答案 2 :(得分:0)
这应该有效:
get-process | format-table Id,Path