Pipa PowerShell nel comando find.exe


8

Solo curioso, perché succede? Se corro:

netstat -an | find "443"

nel prompt dei comandi, le connessioni "443" vengono visualizzate correttamente. Se eseguo lo stesso comando in una console PowerShell o ISE, viene visualizzato l'errore "TROVA: formato parametro non corretto". L'output di netstat non viene reindirizzato correttamente per essere trovato in PS?

Nota: se corro netstat -an | findstr "443"o netstat -an | select-string "443"su PS funzionano come previsto.


duplicato su più siti: perché "trovare" non può essere utilizzato in PowerShell . Potrebbe essere meglio usare select-stringin PowerShell
phuclv

Risposte:


13

PowerShell valuta il contenuto tra virgolette doppie per eseguire qualsiasi espansione variabile, sottoespressioni, ecc., Quindi scarta quelle doppie virgolette. Ciò che PowerShell restituisce "443"è letteralmente 443(notare le virgolette mancanti). FIND.EXE richiede la stringa di ricerca racchiusa tra virgolette doppie.

Se vuoi impedire a PowerShell di rimuovere le doppie virgolette usa l'accento grave (`) per sfuggirle.

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

È inoltre possibile utilizzare il --%parametro per eseguire l'escape. Richiede PowerShell 3+.

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

Mi chiedo perché findstr.exe funzioni senza escape?
Vic

3
@Vic L' findstrutilità non richiede doppie virgolette nel /Cparametro string: findstr /C:somestring somefilefunziona come fa findstr /C:"somestring" somefile. Per FIND, le doppie virgolette sono richieste presenti.
jscott
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.