mata todos os processos com taskkill pelo username mas exclui alguns processos

0

Eu quero matar todos os processos com taskkill por username, com este comando:

taskkill /f /fi "USERNAME eq %username%"

O problema é que eu quero excluir (ignorar) alguns processos (não matá-los todos), como explorer.exe, taskmgr.exe, cmd.exe e, claro, a instância atual do CMD

Como posso excluir este processo com tarefas?

obrigado

    
por BrianC 29.09.2016 / 18:55

2 respostas

1

Método CMD de script nativo do Windows

Abaixo está uma solução de script em lote que usa a Lista de Tarefas e FOR / F faz um loop na configuração e na análise de variáveis de acordo para obter apenas os nomes de processos dos processos em execução de um usuário específico.

Com Findstr , esses resultados são então analisados para excluir as exclusões especificadas que você definiu na variável Exclusions acima .

Isso levará os resultados finais restantes e eliminará os nomes dos processos para esse nome de usuário específico, fornecendo os resultados desejados por meio de um script em lote, exatamente como explicado.

Script em lote

Há apenas duas variáveis para definir para que funcionem, que são Username e Exclusions , e o restante apenas funcionará e fará o resto do processo conforme necessário. Apenas especifique os nomes completos do processo separados por um espaço um ao lado do outro, assim como no script abaixo.

@ECHO ON
SET Username=user
SET Exclusions=explorer.exe taskmgr.exe cmd.exe 

SET tmpfl=%temp%\%~n0tmp.dat
IF EXIST "%tmpfl%" DEL /F /Q "%tmpfl%"
SET Exclusions=%Exclusions% taskkill.exe 

SETLOCAL ENABLEDELAYEDEXPANSION
FOR /F "DELIMS=: TOKENS=2" %%A IN ('TASKLIST /FI "USERNAME EQ %Username%" /FO LIST ^| FIND /I "Image name:"') DO (
    SET var=%%~A
    SET var=!var: =!
    ECHO !var! | FINDSTR /I /V "%Exclusions%">>"%tmpfl%"
)
FOR /F "USEBACKQ TOKENS=*" %%A IN ("%tmpfl%") DO (
    TASKKILL /F /FI "USERNAME eq %Username%" /IM %%~A
)
GOTO EOF

Script em lote 2

@ECHO ON
CD /D "%~DP0"
SET Exclusions=cmd.exe explorer.exe taskmgr.exe 

SET tmpfl=%~n0tmp.dat
IF EXIST "%tmpfl%" DEL /F /Q "%tmpfl%"
SET Exclusions=%Exclusions% taskkill.exe 

SETLOCAL ENABLEDELAYEDEXPANSION
FOR /F "DELIMS=: TOKENS=2" %%A IN ('TASKLIST /FI "USERNAME EQ %Username%" /FO LIST ^| FIND /I "Image name:"') DO (
    SET var=%%~A
    SET var=!var: =!
    ECHO !var! | FINDSTR /I /V "%Exclusions%">>"%tmpfl%"
)
FOR /F "USEBACKQ TOKENS=*" %%A IN ("%tmpfl%") DO (
    TASKKILL /F /FI "USERNAME eq %Username%" /IM %%~A
)
DEL /F /Q "%tmpfl%"
GOTO EOF

Mais recursos

por 29.09.2016 / 21:26
2

Eu pessoalmente faria isso usando o powershell.

Algo parecido com isto:

$processes = Get-Process -IncludeUserName | where {$_.UserName -like "*USERNAME*"}
$tobeignored = @("explorer","Taskmgr","cmd")
foreach($process in $processes)
{
    if($tobeignored.Contains($process.ProcessName))
    {
        continue;
    }
    else
    {
        Stop-Process $process.Id -Force
    }
}

Eu não tenho sido capaz de testar isso, eu não quero matar meus próprios processos :) Deixe-me saber se (não) funciona (s)

    
por 29.09.2016 / 19:42