从其自身描述中获取进程名称?

从其自身描述中获取进程名称?

如何根据进程描述使用循环从计算机内存中获取进程名称?

例子:

我的程序名称在内存中是“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.exe”和“notepad++.exe”都在运行,则传递“notepad”将同时匹配它们。

示例输出:

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.exe”和“notepad++.exe”都在运行,则传递“notepad”将同时匹配它们。
  • 脚本输出“文件描述”、“进程路径”和“进程名称”。

示例输出:

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”在运行便携版时在内存中有两个进程。

相关内容