Selecione vários processos para finalizar no XP via -.vbs

0

Estou tentando fazer um script que me permita matar alguns processos quando eu precisar de um máximo de recursos. Coisas que não me importo de inicializar quando inicio o XP (dropbox, PowerISO, OpenOffice-tray, etc.), mas como todas comem um pouco de memória, eu gostaria de criar um script que terminasse com um clique. / p>

Agora, meu problema é relacionado a SQL. Eu tenho um script que terminará um único processo com esta aparência:

       strComputer = "."
       Set objWMIService = GetObject("winmgmts:" _
        & "{impersonationLevel=impersonate}!\" & strComputer & "\root\cimv2")
       Set colProcessList = objWMIService.ExecQuery _
        ("SELECT * FROM Win32_Process WHERE Name = 'PWRISOVM.EXE'")
       For Each objProcess in colProcessList
        objProcess.Terminate()
       Next

Mas eu não posso, pela minha vida, fazer a instrução SELECT pegar mais de um único processo. Se alguém puder me esclarecer sobre isso, ficarei muito feliz: -)

    
por morganF 17.01.2012 / 23:57

2 respostas

2

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'

    
por 18.01.2012 / 00:34
0

Se tudo se resumisse a isso ... eu apenas os colocaria na linha ... um processo após o outro ... no mesmo formato que você tem lá.

   strComputer = "."
   Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\" & strComputer & "\root\cimv2")
   Set colProcessList = objWMIService.ExecQuery _
    ("SELECT * FROM Win32_Process WHERE Name = 'PWRISOVM1.EXE'")
   For Each objProcess in colProcessList
    objProcess.Terminate()
   Next

   strComputer = "."
   Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\" & strComputer & "\root\cimv2")
   Set colProcessList = objWMIService.ExecQuery _
    ("SELECT * FROM Win32_Process WHERE Name = 'PWRISOVM2.EXE'")
   For Each objProcess in colProcessList
    objProcess.Terminate()
   Next

3,4,5 etc.

    
por 29.05.2012 / 21:13