
Как получить имя процесса из памяти компьютера, используя цикл в зависимости от описания процесса?
Пример:
Имя моей программы в памяти — «dev.exe», а ее описание — «инструмент для помощи разработчикам PHP».
Есть ли способ узнать имя моего процесса, используя описание процесса, даже если пользователь изменил имя?
Можно ли сделать это с помощью autoit, cmd или wmic?
решение1
Я нашел эту ссылку, пытаясь решить ту же проблему. Основываясь на существующем ответе, простая строка, которую можно добавить в существующий скрипт:
Get-Process | where {$_.Description -like '*note*'} | select Path, Description, ProcessName
Пример вывода:
Path Description ProcessName
---- ----------- -----------
C:\Windows\system32\notepad.exe Notepad notepad
C:\Program Files\Microsoft Office\root\Office16\ONENOTE.EXE Microsoft OneNote ONENOTE
C:\Program Files\Microsoft Office\root\Office16\ONENOTEM.EXE Send to OneNote Tool ONENOTEM
решение2
Как найти имя запущенного процесса, зная значение его свойства «Описание файла»?
Улучшенное решение(спасибо @BenN за обсуждение в чате):
Используйте следующий скрипт PowerShell (Get-ProcessName.ps1).
$_match=$Args[0].ToLowerInvariant()
Get-Process | where {$_.Description -ne $null -and $_.Description.ToLowerInvariant().Contains($_match)} | select Path, Description, ProcessName
Примечания:
- Первый параметр, переданный скрипту, используется для выполнения поиска без учета регистра в значении свойства «Описание файла».
- При передаче «notepad» будут соответствовать как «notepad.exe», так и «notepad++.exe», если они оба запущены.
Пример вывода:
PS F:\test> .\Get-ProcessName notepad
Path Description ProcessName
---- ----------- -----------
C:\Windows\system32\notepad.exe Notepad notepad
E:\LiberKey\Apps\Notepad++\App\Notepad++\notepad++.exe Notepad++ : a free (GNU) source code editor notepad++
E:\LiberKey\Apps\Notepad++\App\Notepad++\notepad++.exe Notepad++ : a free (GNU) source code editor notepad++
PS F:\test>
Оригинальное решение:
Используйте следующий скрипт Powershell (Get-ProcessName.ps1).
$_name=$Args[0]
$_match="*"+$Args[0]+"*"
Get-Process | ForEach {
if ($_.Path) {
$_filedescription=(Get-Item $_.Path).VersionInfo.FileDescription
if ($_filedescription -like $_match) {
Write-Output "File Description: '$_filedescription', Process Path: '$($_.Path)', Process Name: '$($_.ProcessName)'"
}
}
}
Примечания:
- Первый параметр, переданный скрипту, используется для выполнения поиска по шаблону без учета регистра в значении свойства «Описание файла».
- Если вы передадите,
string
будет выполнен поиск с использованием*string*
и будет найдено соответствиеstring
в любом месте в пределах свойства «Описание файла». - При передаче «notepad» будут соответствовать как «notepad.exe», так и «notepad++.exe», если они оба запущены.
- Скрипт выводит «Описание файла», «Путь процесса» и «Имя процесса».
Пример вывода:
PS F:\test> .\Get-ProcessName notepad
File Description: 'Notepad', Process Path: 'C:\Windows\system32\notepad.exe', Process Name: 'notepad'
File Description: 'Notepad++ : a free (GNU) source code editor', Process Path: 'E:\LiberKey\Apps\Notepad++\App\Notepad++\notepad++.exe', Process Name: 'notepad++'
File Description: 'Notepad++ : a free (GNU) source code editor', Process Path: 'E:\LiberKey\Apps\Notepad++\App\Notepad++\notepad++.exe', Process Name: 'notepad++'
PS F:\test>
Примечания:
- При запуске портативной версии «notepad++.exe» имеет два процесса в памяти.