Могу ли я использовать PowerShell 1.0 для отображения процессов вместе с их PID и командными строками? - PullRequest
4 голосов
/ 24 июня 2009

РЕДАКТИРОВАТЬ OP: Мой вопрос предполагал, что PowerShell был лучшим инструментом для этой работы. Есть более простой способ достижения моей цели. Друг только что рассказал мне о: iisapp.vbs . Он отображает именно ту информацию, которая мне нужна, без необходимости PowerShell.


Я работаю с десятками веб-сайтов ASP.NET, работающих локально, и когда я хочу отладить определенный веб-сайт с именем, например, foo.site.com, я выполняю следующие шаги:

  1. Запустите Process Explorer (из SysInternals) и найдите, какой w3wp.exe был запущен с foo.site.com в его командной строке.

  2. Обратите внимание на идентификатор процесса (PID) этого процесса w3wp.exe.

  3. В Visual Studio присоедините к этому идентификатору процесса.

Есть ли способ написать сценарий PowerShell, который будет печатать аргументы PID и командной строки каждого процесса w3wp.exe, запущенного на моем компьютере?

Когда я запускаю 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

Нет данных командной строки: (

Спасибо!

EDIT: я ищу аргументы командной строки, которые были переданы в w3wp.

Ответы [ 3 ]

12 голосов
/ 24 июня 2009

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

2 голосов
/ 24 июня 2009

Моим первым инстинктом было использование 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
0 голосов
/ 24 июня 2009

Это должно работать:

get-process | Id формата таблицы, путь

...