find.exeコマンドへのPowerShellパイプ


8

好奇心旺盛ですが、なぜこれが起こるのですか?実行した場合:

netstat -an | find "443"

コマンドプロンプトに「443」接続が表示されます。PowerShellコンソールまたはISEで同じコマンドを実行すると、「FIND:Parameter format not correct」というエラーが表示されます。PSで見つけるためにnetstat出力が適切にパイプ処理されていませんか?

注:PSで実行したnetstat -an | findstr "443"場合netstat -an | select-string "443"、これらは期待どおりに動作します。


クロスサイト複製:PowerShellで使用できないのはなぜですかselect-stringpowershellで使用した方がよい場合があります
phuclv

回答:


13

PowerShellは、二重引用符内のコンテンツを評価して、変数の展開や部分式などを実行し、それらの二重引用符を破棄します。PowerShellが返すもの"443"は文字通りです443(引用符がないことに注意してください)。二重引用符で囲まれた検索文字列FIND.EXE が必要です。

PowerShellで二重引用符が削除されないようにする場合は、アクサングラーブ( `)を使用してエスケープします。

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

--%パラメータを使用してエスケープを実行することもできます。PowerShell 3以降が必要です。

nestat -a -n | find --% "443"

findstr.exeがエスケープせずに機能するのはなぜですか?
2016年

3
@Vic findstrユーティリティはで二重引用符は必要ありません/C:文字列パラメータfindstr /C:somestring somefile同じように作品をfindstr /C:"somestring" somefile。の場合FIND、二重引用符が必要です。
jscott 2016年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.