Чи є якась річ, як труба або подібне, яку я можу використовувати в ОС 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.
findstr
(Windowsgrep
). Наприклад:netstat -a -o -n | findstr "LISTENING" | findstr ":135"
. Можливо, це