Pipa PowerShell menjadi perintah find.exe

8

Hanya ingin tahu, mengapa ini terjadi? Jika saya menjalankan:

netstat -an | find "443"

ke prompt perintah, koneksi "443" ditampilkan ok. Jika saya menjalankan perintah yang sama di konsol PowerShell atau ISE, saya mendapatkan kesalahan "CARI: Format parameter tidak benar". Apakah output netstat tidak disalurkan dengan benar untuk ditemukan di PS?

Catatan: Jika saya menjalankan netstat -an | findstr "443"atau netstat -an | select-string "443"dalam PS itu bekerja seperti yang diharapkan.

Vic
sumber
duplikat lintas-situs: Mengapa "menemukan" tidak dapat digunakan di PowerShell . Mungkin lebih baik digunakan select-stringdi PowerShell
phuclv

Jawaban:

13

PowerShell mengevaluasi konten dalam tanda kutip ganda untuk melakukan ekspansi variabel, sub-ekspresi, dll, lalu membuang tanda kutip ganda tersebut. Apa PowerShell kembali dari "443"secara harfiah 443(perhatikan kutipan yang hilang). FIND.EXE membutuhkan string pencarian yang disertai dengan tanda kutip ganda.

Jika Anda ingin mencegah PowerShell melepaskan tanda kutip ganda, gunakan aksen kubur (`) untuk menghindarinya.

netstat -a -n  | find `"443`"

Anda juga dapat menggunakan --%parameter untuk melakukan pelarian. Membutuhkan PowerShell 3+.

nestat -a -n | find --% "443"
jscott
sumber
Saya bertanya-tanya mengapa findstr.exe berfungsi tanpa melarikan diri?
Vic
3
@Vic findstrUtilitas tidak memerlukan tanda kutip ganda dalam /Cparameter string: findstr /C:somestring somefileberfungsi seperti halnya findstr /C:"somestring" somefile. Sebab FIND, tanda kutip ganda diperlukan hadir.
jscott