PowerShell-Pipe in den Befehl find.exe

8

Nur neugierig, warum passiert das? Wenn ich renne:

netstat -an | find "443"

In einer Eingabeaufforderung werden "443" -Verbindungen in Ordnung angezeigt. Wenn ich denselben Befehl in einer PowerShell-Konsole oder ISE ausführe, wird die Fehlermeldung "FIND: Parameterformat nicht korrekt" angezeigt. Wird die Netstat-Ausgabe nicht richtig weitergeleitet, um sie in PS zu finden?

Hinweis: Wenn ich laufe netstat -an | findstr "443"oder netstat -an | select-string "443"in PS, funktionieren diese wie erwartet.

Vic
quelle
Cross-Site - Duplikat: Warum kann „finden“ nicht in Powershell verwendet werden . Es kann besser sein, select-stringin Powershell
Phuclv

Antworten:

13

PowerShell wertet den Inhalt in doppelten Anführungszeichen aus, um Variablenerweiterungen, Unterausdrücke usw. auszuführen, und verwirft dann diese doppelten Anführungszeichen. Was PowerShell zurückgibt, "443"ist buchstäblich 443(beachten Sie die fehlenden Anführungszeichen). FIND.EXE erfordert die Suchzeichenfolge in doppelten Anführungszeichen.

Wenn Sie verhindern möchten, dass PowerShell die doppelten Anführungszeichen entfernt, verwenden Sie den gravierenden Akzent (`), um sie zu umgehen.

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

Sie können den --%Parameter auch verwenden , um das Escape durchzuführen. Benötigt PowerShell 3+.

nestat -a -n | find --% "443"
jscott
quelle
Ich frage mich, warum findstr.exe funktioniert, ohne zu entkommen.
Vic
3
@Vic Das findstrDienstprogramm erfordert keine doppelten Anführungszeichen im /CZeichenfolgenparameter: findstr /C:somestring somefilefunktioniert wie folgt findstr /C:"somestring" somefile. Für FINDdie doppelten Anführungszeichen sind vorhanden.
Jscott