WQL ("SQL para WMI "). Isto é importante notar, porque eles não são idênticos. O WQL é destinado a estar próximo do SQL. :) De qualquer forma ...
SELECT * FROM Win32_Process WHERE Name = 'PWRISOVM.EXE'
Selecionará apenas processos com o nome específico 'PWRISOVM.EXE'.
Select * from Win32_Process
Conseguiria uma lista completa.
Eu fiz um script similar para o Vista / 7 alguns anos atrás. Faça uma matriz de processos para manter e, em seguida, percorra os processos de eliminação sem dependentes, ignorando os que estão na matriz. Então faça isso de novo, isso ajudará a matar todas as crianças primeiro e depois os pais. Terceiro passe deve "ignorar se eles têm dependentes" e "forçar" o fechamento; ajuste suas quantidades de loop como achar melhor. :)
Faça o mesmo para os Serviços ("Pare" eles antes matando os processos).
De minhas experiências, você encontrará a maior recuperação de recursos apenas matando o Explorer.exe sozinho.
E não esqueça o seu Gerenciador de tarefas, CMD e exclusões de processos de host de script. ;)
- Editar: -
Com seu código de exemplo, se você usar apenas Select * from Win32_Process
, ele colocará a lista completa na coleção "colProcessList". Conforme você percorre todos eles em seu loop "For Each", você pode decidir por processo a processo.
Para responder diretamente ao que seu comentário parece pedir:
Para selecionar vários processos específicos por nome em uma declaração Select, use o operador 'OR':
Select * from Win32_Process where Name = 'Process1' or Name = 'AnotherProcess'