Canalización de PowerShell en el comando find.exe

8

Por curiosidad, ¿por qué sucede esto? Si corro:

netstat -an | find "443"

en un símbolo del sistema, las conexiones "443" se muestran bien. Si ejecuto el mismo comando en una consola PowerShell o ISE, aparece el error "ENCONTRAR: El formato del parámetro no es correcto". ¿La salida de netstat no se canaliza correctamente para encontrar en PS?

Nota: Si ejecuto netstat -an | findstr "443"o netstat -an | select-string "443"en PS, funcionan como se esperaba.

Vic
fuente
duplicado entre sitios: ¿Por qué no se puede usar "buscar" en PowerShell ? Puede ser mejor usarlo select-stringen powershell
phuclv

Respuestas:

13

PowerShell evalúa el contenido entre comillas dobles para realizar cualquier expansión variable, subexpresiones, etc., luego descarta esas comillas dobles. De lo que regresa PowerShell "443"es literalmente 443(tenga en cuenta las citas que faltan). FIND.EXE requiere la cadena de búsqueda entre comillas dobles.

Si desea evitar que PowerShell elimine las comillas dobles, use el acento grave (`) para escapar de ellas.

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

También puede usar el --%parámetro para realizar el escape. Requiere PowerShell 3+.

nestat -a -n | find --% "443"
jscott
fuente
Me pregunto por qué los hallazgos.exe funciona sin escapar?
Vic
3
@Vic La findstrutilidad no requiere comillas dobles en el /Cparámetro de cadena: findstr /C:somestring somefilefunciona como lo hace findstr /C:"somestring" somefile. Para FIND, las comillas dobles se requieren presente.
jscott