
Como posso obter o nome do processo da memória do computador usando loop dependendo da descrição do processo?
Exemplo:
O nome do meu programa é "dev.exe" na memória e sua descrição é "uma ferramenta para ajudar desenvolvedores php"
Existe alguma maneira de encontrar o nome do meu processo usando a descrição do processo, mesmo que o usuário altere o nome?
Podemos fazer isso com autoit, cmd ou wmic?
Responder1
Encontrei este link tentando resolver o mesmo problema. Construindo a partir da resposta existente, uma linha simples que pode ser adicionada a um script existente:
Get-Process | where {$_.Description -like '*note*'} | select Path, Description, ProcessName
Exemplo de saída:
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
Responder2
Como encontro um nome de processo em execução, considerando o valor da propriedade "Descrição do arquivo"?
Solução melhorada(graças a @BenN após discussão no chat):
Use o seguinte script do PowerShell (Get-ProcessName.ps1).
$_match=$Args[0].ToLowerInvariant()
Get-Process | where {$_.Description -ne $null -and $_.Description.ToLowerInvariant().Contains($_match)} | select Path, Description, ProcessName
Notas:
- O primeiro parâmetro passado ao script é utilizado para realizar uma pesquisa sem distinção entre maiúsculas e minúsculas dentro do valor da propriedade "Descrição do arquivo".
- Passar "notepad" corresponderá a "notepad.exe" e "notepad++.exe" se ambos estiverem em execução.
Exemplo de saída:
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>
Solução original:
Use o seguinte script 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)'"
}
}
}
Notas:
- O primeiro parâmetro passado ao script é usado para realizar uma pesquisa "curinga" sem distinção entre maiúsculas e minúsculas dentro do valor da propriedade "Descrição do arquivo".
- Se você passar,
string
ele pesquisará usando*string*
e corresponderástring
a qualquer lugar dentro da propriedade "Descrição do arquivo" - Passar "notepad" corresponderá a "notepad.exe" e "notepad++.exe" se ambos estiverem em execução.
- O script gera a "Descrição do arquivo", "Caminho do processo" e "Nome do processo.
Exemplo de saída:
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>
Notas:
- "notepad++.exe" possui dois processos na memória ao executar a versão portátil.