我可以使用PowerShell 1.0列出进程以及它们的PID和命令行吗?

时间:2009-06-24 17:47:47

标签: powershell powershell-v1.0

OP编辑:我的问题预先假定PowerShell是这项工作的最佳工具。有一种更简单的方法来实现我的目标。一位朋友告诉我:iisapp.vbs。它显示我需要的信息而无需PowerShell。


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

  1. 运行Process Explorer(来自SysInternals),并在命令行中找到使用foo.site.com启动的w3wp.exe。

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

  3. 在Visual Studio中附加到该进程ID。

  4. 有没有办法编写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的命令行参数。

3 个答案:

答案 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