PowerShell труба в команду find.exe

8

Просто любопытно, почему это происходит? Если я бегу:

netstat -an | find "443"

в командной строке «443» соединения отображаются нормально. Если я выполняю ту же команду в консоли PowerShell или ISE, я получаю ошибку «НАЙТИ: неверный формат параметра». Не выводится ли netstat должным образом, чтобы найти его в PS?

Примечание: если я запускаю netstat -an | findstr "443"или netstat -an | select-string "443"в PS, они работают, как ожидалось.

Vic
источник
межсайтовый дубликат: почему «найти» нельзя в PowerShell . Может быть лучше использовать select-stringв powershell
phuclv

Ответы:

13

PowerShell оценивает содержимое в двойных кавычках для выполнения любого расширения переменных, подвыражений и т. Д., А затем отбрасывает эти двойные кавычки. PowerShell возвращает "443"буквально 443(обратите внимание на пропущенные кавычки). FIND.EXE требуется строка поиска, заключенная в двойные кавычки.

Если вы хотите, чтобы PowerShell не удалял двойные кавычки, используйте серьезный акцент (`), чтобы избежать их.

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

Вы также можете использовать --%параметр для выполнения escape. Требуется PowerShell 3+.

nestat -a -n | find --% "443"
jscott
источник
Интересно, почему findstr.exe работает без выхода?
Vic
3
@Vic findstrУтилита не требует двойных кавычек в /Cстроковом параметре: findstr /C:somestring somefileработает как и findstr /C:"somestring" somefile. Для FINDдвойных кавычек обязательно присутствует.
Jscott