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.exePowerShell 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 4ilk dört başlık satırını atlar. ( nesnelerin projeleri gibi SQL SELECT gerçekleştirmek Selectiçin kısadır Select-Object.
%kısaltması , boru hattındaki Foreach-Objecther 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 Originaldize netstatve Fieldsyeni oluşturulan dizinin iki özelliği olan yeni bir nesne oluşturur.
?Where-Objectkomut 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;)