Apakah ada hal seperti pipa atau sejenisnya yang dapat saya gunakan pada OS Windows untuk menjalankan perintah ini dalam satu baris?
Keduanya cmd.exe
dan pipa dukungan PowerShell dari satu perintah ke perintah lainnya. Dalam PowerShell sesuatu seperti (ini harus berada pada satu baris pada baris perintah, atau gunakan `untuk mengawal baris baru dalam skrip):
netstat -ano
| select -skip 4
| % {$a = $_ -split ' {3,}'; New-Object 'PSObject' -Property @{Original=$_;Fields=$a}}
| ? {$_.Fields[1] -match '15120$'}
| % {taskkill /F /PID $_.Fields[4] }
Dimana:
Select -skip 4
melompati empat baris tajuk pertama. ( Select
kependekan dari Select-Object
digunakan untuk melakukan SQL SELECT seperti proyek objek.
%
kependekan Foreach-Object
yang melakukan blok skrip pada setiap objek ( $_
) di dalam pipa dan mengeluarkan hasil dari blok skrip ke pipa. Ini dia pertama-tama memecah input menjadi array bidang dan kemudian membuat objek segar dengan dua properti Original
dari string netstat
dan Fields
array yang baru saja dibuat.
?
kependekan dari Where-Object
filter mana yang didasarkan pada hasil dari blok skrip. Di sini cocok dengan regex pada akhir bidang kedua (semua wadah PowerShell berbasis nol).
(Semua diuji kecuali elemen terakhir: Saya tidak ingin memulai proses mematikan :-)).
Dalam praktiknya saya akan menyederhanakan ini, misalnya. mengembalikan hanya 0 atau PID dari yang pertama foreach
(yang akan dirancang untuk mengabaikan header) dan memfilter pada nilai tidak nol sebelum memanggil taskkill
. Ini akan lebih cepat untuk mengetik tetapi lebih sulit untuk diikuti tanpa mengetahui PowerShell.
findstr
(Windowsgrep
). Sebagai contoh:netstat -a -o -n | findstr "LISTENING" | findstr ":135"
. Mungkin ini membuat Anda selangkah lebih dekat;)