Могу ли я использовать PowerShell 1.0 для вывода списка процессов вместе с их идентификаторами PID и командными строками?

EDIT by 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

Нет информации о командной строке :(

Спасибо!

РЕДАКТИРОВАТЬ: я ищу аргументы командной строки, которые были переданы в w3wp.


person Tim Stewart    schedule 24.06.2009    source источник
comment
Существует также оснастка IIS7, которая добавляет ряд интересных командлетов для управления IIS. learn.iis .net/page.aspx/447/   -  person Brian Reiter    schedule 25.06.2009


Ответы (3)


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

person Raoul Supercopter    schedule 24.06.2009
comment
SuperBloup, это сработало! Меня разочаровал макет PowerShell 1.0. PowerShell обрезал командную строку, несмотря на то, что вывод занимал только половину экрана. Я обнаружил, что передача всего в ft -autosize позволяет мне видеть всю командную строку. Спасибо! - person Tim Stewart; 24.06.2009
comment
Что касается Powershell, который по умолчанию не предоставляет информацию о командной строке: .msdn.com/oldnewthing/archive/2009/02/23/9440784.aspx - person Joey; 24.06.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
person Brian Reiter    schedule 24.06.2009
comment
Брайан, спасибо за ваш ответ. Замена: get-wmio[jb]ect на get-wmio[bj]ect была необходима, чтобы вторая команда заработала. - person Tim Stewart; 24.06.2009
comment
Тим, я исправил переставленные буквы. Слишком быстрый набор текста. FWIW, если неясно, gwmi — это стандартный псевдоним для командлета Get-WmiObject, а select — стандартный псевдоним для Select-Object. - person Brian Reiter; 25.06.2009

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

получить-процесс | идентификатор таблицы форматов, путь

person Robert Wilczynski    schedule 24.06.2009
comment
Роберт, спасибо за ваш ответ. Прошу прощения, если мой вопрос был неясен. Я ищу командную строку (включая аргументы), с которой был запущен процесс. - person Tim Stewart; 24.06.2009
comment
Извините, слишком нетерпелив, чтобы ответить, я думаю. Перед публикацией нужно дважды прочитать вопрос :) - person Robert Wilczynski; 24.06.2009