4

OP 编辑​​:我的问题假定 PowerShell 是完成这项工作的最佳工具。有一种更简单的方法可以实现我的目标。一位朋友刚刚告诉我:iisapp.vbs。它准确地显示了我需要的信息,而不需要 PowerShell。


我正在处理在本地运行的数十个 ASP.NET 网站,当我想调试一个名为 foo.site.com 的特定网站时,我会执行以下步骤:

  1. 运行 Process Explorer(来自 SysInternals)并在其命令行上查找哪个 w3wp.exe 是使用 foo.site.com 启动的。

  2. 请注意该 w3wp.exe 进程的进程 ID (PID)。

  3. 在 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 的命令行参数。

4

3 回答 3

13

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'" | format-table -autosize name,processId,commandLine

于 2009-06-24T18:05:32.150 回答
2

我的第一反应是使用 get-process 并查看 startinfo 属性:

get-process w3wp | select-object id, path, @{Name="Args";Expression = {$_.StartInfo.Arguments}}

不幸的是,这不起作用,因为 $_.StartInfo.Argments 始终为空。不过,WMI 可以工作。

get-wmiobject win32_process -filter "name='w3wp.exe'" | select-object processid, commandline
于 2009-06-24T18:16:10.293 回答
0

这应该有效:

获取进程 | 格式表 ID,路径

于 2009-06-24T17:51:56.137 回答