Получение пути к файлу запущенного процесса - PullRequest
5 голосов
/ 28 января 2012

У меня есть приложение, которое использует файл .dll, есть 2 разных места для файла, и мне нужно выяснить, какое из них используется на более чем 200 компьютерах.

Я очень плохо знаком с Power Shell и пробовал метод Get-Process, но он не предоставляет нужную мне информацию, есть ли другой способ получить это в Power Shell?

Ответы [ 3 ]

3 голосов
/ 28 января 2012

Библиотеки DLL для процесса содержатся в свойстве Modules объекта Process, возвращаемого Get-Process.

Get-Process notepad| select -ExpandProperty modules| Format-Table -AutoSize

Чтобы найти конкретную DLL, вы можете сделать что-то вроде этого:

Get-Process chrome| 
    select -ExpandProperty modules|
    foreach { if($_.ModuleName -eq 'pdf.dll'){$_.Filename} }

Поскольку может быть много процессов с одинаковыми именами, вы можете использовать это, чтобы показать только отдельные местоположения DLL:

Get-Process chrome| 
    select -ExpandProperty modules|
    where {$_.ModuleName -eq 'pdf.dll'}|
    group -Property FileName|
    select name
2 голосов
/ 28 января 2012

В этой статье представлен один подход с использованием вызова поставщика WMI. Вы можете использовать предоставленную функцию в конце. Если вы просто ищете что-то быстрое и грязное, это сработает.

Копаем немного больше, это может быть тем, что вы хотите:

$modules = Get-Process | Where { $_.ProcessName -eq "process.name" } | Select Modules
$modules.Modules

Замените process.name на имя вашего процесса

0 голосов
/ 31 января 2012

Некоторое время назад я написал статью о том, как найти библиотеки DLL, которые были загружены определенным процессом. Вероятно, вы можете адаптировать этот код, чтобы найти вашу конкретную DLL.

http://trevorsullivan.net/2010/08/25/powershell-finding-currently-loaded-dlls/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...