web-dev-qa-db-ja.com

独自の説明からプロセス名を取得しますか?

プロセスの説明に応じてループを使用して、コンピュータのメモリからプロセス名を取得するにはどうすればよいですか?

例:

私のプログラム名はメモリ内の「dev.exe」で、その説明は「php開発者を支援するためのツール」です。

ユーザーが名前を変更した場合でも、プロセスの説明を使用してプロセス名を見つける方法はありますか?

これをautoitまたはcmdまたはwmicで実行できますか?

3
Qassam Mahmoud

私はこのリンクが同じ問題を解決しようとしているのを見つけました。既存の回答を基に、既存のスクリプトに追加できる簡単な行:

 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
1
Jason Landstrom

「ファイルの説明」プロパティ値を指定して実行中のプロセス名を見つけるにはどうすればよいですか?

改善されたソリューション(チャットでの議論に続く@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」は、ポータブルバージョンを実行するときにメモリ内に2つのプロセスがあります。
2
DavidPostill