Есть ли что-то вроде конвейера или чего-то подобного, что я могу использовать в ОС Windows для запуска этой команды в одну строку?
И cmd.exe и PowerShell поддерживают каналы от одной команды к другой. В PowerShell что-то вроде (это должно быть в одной строке в командной строке или использовать `для экранирования строк в скрипте):
netstat -ano
| select -skip 4
| % {$a = $_ -split ' {3,}'; New-Object 'PSObject' -Property @{Original=$_;Fields=$a}}
| ? {$_.Fields[1] -match '15120$'}
| % {taskkill /F /PID $_.Fields[4] }
Куда:
Select -skip 4 пропускает первые четыре строки заголовка. (Select - это сокращение от Select-Object используемого для выполнения SQL SELECT как проектов объектов.
% - это сокращение от Foreach-Object которое выполняет блок скрипта для каждого объекта ($_) в конвейере и выводит результаты блока скрипта в конвейер. Здесь он сначала разбивает входные данные на массив полей, а затем создает новый объект с двумя свойствами. Original строка из netstat и Fields только что созданного массива.
? сокращение от Where-Object которое фильтрует на основе результата блока скрипта. Здесь соответствие регулярному выражению в конце второго поля (все контейнеры PowerShell начинаются с нуля).
(Все протестировано, кроме последнего элемента: я не хочу начинать процессы уничтожения :-)).
На практике я бы упростил это, например. возвращая только 0 или PID из первого foreach (который был бы разработан, чтобы игнорировать заголовки) и фильтровать по значению, отличному от нуля, перед вызовом taskkill . Это будет быстрее набирать, но сложнее следовать, не зная PowerShell.