Tuyau PowerShell dans la commande find.exe

8

Juste curieux, pourquoi cela se produit-il? Si je cours:

netstat -an | find "443"

dans une invite de commande, les connexions "443" sont affichées ok. Si j'exécute la même commande dans une console PowerShell ou ISE, j'obtiens l'erreur "FIND: Format de paramètre non correct". La sortie netstat n'est-elle pas correctement canalisée pour être trouvée dans PS?

Remarque: Si je lance netstat -an | findstr "443"ou netstat -an | select-string "443"dans PS, ceux-ci fonctionnent comme prévu.

Vic
la source
doublon intersite: pourquoi «trouver» ne peut-il pas être utilisé dans PowerShell . Il peut être préférable de l'utiliser select-stringdans
PowerShell

Réponses:

13

PowerShell évalue le contenu entre guillemets doubles pour effectuer une expansion variable, des sous-expressions, etc., puis il supprime ces guillemets doubles. Ce que PowerShell renvoie "443"est littéralement 443(notez les guillemets manquants). FIND.EXE nécessite la chaîne de recherche entre guillemets.

Si vous souhaitez empêcher PowerShell de supprimer les guillemets doubles, utilisez l'accent grave (`) pour y échapper.

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

Vous pouvez également utiliser le --%paramètre pour effectuer l'évasion. Nécessite PowerShell 3+.

nestat -a -n | find --% "443"
jscott
la source
Je me demande pourquoi findstr.exe fonctionne sans s'échapper?
Vic
3
@Vic L' findstrutilitaire ne nécessite pas de guillemets doubles dans le /Cparamètre de chaîne: findstr /C:somestring somefilefonctionne comme le fait findstr /C:"somestring" somefile. Pour FIND, les guillemets doubles sont requis présents.
jscott