Bu komutu tek bir satırda çalıştırmak için Windows işletim sisteminde kullanabileceğim bir boru veya benzeri bir şey var mı?
Hem cmd.exe
PowerShell hem de komutları bir komuttan diğerine destekler. PowerShell'de şöyle bir şey (bu komut satırında tek bir satırda olmalı veya bir komut dosyasında yeni satırlardan kaçmak için `kullanmalıdır):
netstat -ano
| select -skip 4
| % {$a = $_ -split ' {3,}'; New-Object 'PSObject' -Property @{Original=$_;Fields=$a}}
| ? {$_.Fields[1] -match '15120$'}
| % {taskkill /F /PID $_.Fields[4] }
Nerede:
Select -skip 4
ilk dört başlık satırını atlar. ( nesnelerin projeleri gibi SQL SELECT gerçekleştirmek Select
için kısadır Select-Object
.
%
kısaltması , boru hattındaki Foreach-Object
her nesne ( $_
) üzerinde bir komut dosyası bloğu gerçekleştirir ve komut dosyası bloğunun sonuçlarını boru hattına verir. Burada ilk önce girdiyi bir alan dizisine bölerek Original
dize netstat
ve Fields
yeni oluşturulan dizinin iki özelliği olan yeni bir nesne oluşturur.
?
Where-Object
komut dosyası bloğunun sonucuna göre hangi filtrelerin kısa olduğu. Burada, ikinci alanın sonunda bir normal ifadeyle eşleşiyor (tüm PowerShell kapsayıcıları sıfır tabanlı).
(Son eleman hariç hepsi test edildi: Öldürme işlemlerine başlamak istemiyorum :-)).
Uygulamada bunu basitleştireceğim, örneğin. yalnızca 0 veya ilkinden PID döndürerek foreach
(başlıkları yoksaymak üzere tasarlanır) ve aramadan önce sıfır değerine filtre uygular taskkill
. Bu yazmak daha hızlı olur, ancak PowerShell'i bilmeden takip edilmesi daha zordur.
findstr
(Windowsgrep
) ' a bir göz atalım . Örneğin:netstat -a -o -n | findstr "LISTENING" | findstr ":135"
. Belki bu size bir adım daha yaklaşır;)