Canal do PowerShell no comando find.exe

8

Apenas curioso, por que isso acontece? Se eu correr:

netstat -an | find "443"

em um prompt de comando, as conexões "443" são exibidas ok. Se eu executar o mesmo comando em um console do PowerShell ou ISE, recebo o erro "FIND: Formato do parâmetro incorreto". A saída do netstat não está sendo canalizada corretamente para encontrar no PS?

Nota: Se eu executar netstat -an | findstr "443"ou netstat -an | select-string "443"no PS, eles funcionam conforme o esperado.

Vic
fonte
duplicata entre sites: por que a opção "localizar" não pode ser usada no PowerShell . Pode ser melhor usar select-stringno PowerShell
phuclv

Respostas:

13

O PowerShell avalia o conteúdo entre aspas duplas para executar qualquer expansão variável, subexpressão etc., depois descarta essas aspas duplas. O que o PowerShell retorna "443"é literalmente 443(observe as aspas ausentes). FIND.EXE requer a cadeia de pesquisa fechado com aspas duplas.

Se você deseja impedir que o PowerShell retire as aspas duplas, use o acento grave (`) para escapar delas.

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

Você também pode usar o --%parâmetro para executar a fuga. Requer PowerShell 3+.

nestat -a -n | find --% "443"
jscott
fonte
Gostaria de saber por que findstr.exe funciona sem escapar?
Vic
3
@Vic O findstrutilitário não requer aspas duplas no /Cparâmetro string: findstr /C:somestring somefilefunciona da mesma maneira findstr /C:"somestring" somefile. Para FIND, as aspas duplas são obrigatórias presentes.
jscott