Is there any thing like a pipe or similar that I can use on Windows OS to run this command in one line?
O cmd.exe e o PowerShell suportam pipes de um comando para outro. No PowerShell algo como (isso deve estar em uma única linha na linha de comando ou usar 'para escapar de novas linhas em um script):
netstat -ano
| select -skip 4
| % {$a = $_ -split ' {3,}'; New-Object 'PSObject' -Property @{Original=$_;Fields=$a}}
| ? {$_.Fields[1] -match '15120$'}
| % {taskkill /F /PID $_.Fields[4] }
Onde:
-
Select -skip 4ignora as primeiras quatro linhas de cabeçalho. (Selecté a abreviação deSelect-Objectusado para executar SQL SELECT como projetos de objetos. -
%é a abreviação deForeach-Object, que executa um bloco de script em cada objeto ($_) no pipeline e gera os resultados do bloco de script no pipeline. Aqui está primeiro dividindo a entrada em uma matriz de campos e, em seguida, criando um novo objeto com duas propriedadesOriginalda sequência denetstateFieldsda matriz que acabou de criar. -
?é a abreviação deWhere-Object, que é baseado no resultado de um bloco de script. Aqui corresponde a um regex no final do segundo campo (todos os contêineres do PowerShell são baseados em zero).
(Tudo testado, exceto o último elemento: não quero começar a matar processos: -)).
Na prática eu simplificaria isso, por exemplo. retornando apenas 0 ou o PID do primeiro foreach (que seria projetado para ignorar os cabeçalhos) e filtrar o valor não zero antes de chamar taskkill . Isso seria mais rápido de digitar, mas mais difícil de seguir sem conhecer o PowerShell.