2 votes

Impossible d'exécuter une commande powershell via l'invite de commande

J'essaie de vérifier le paramètre RelayForAuth de mon serveur SMTP Windows à l'aide des commandes ci-dessous. Powershell semble afficher le résultat correct 'False' mais lorsque je lance la même commande via l'invite de commande, une erreur se produit :

Exemple Powershell :

([ADSI]"IIS://localhost/smtpsvc/1".RelayForAuth -like "*0*")

Sortie :

False

Exemple d'invite de commande :

powershell -command "([ADSI]"IIS://localhost/smtpsvc/1".RelayForAuth -like "*0*")"

Sortie :

At line:1 char:8
+ ([ADSI]IIS://localhost/smtpsvc/1.RelayForAuth -like *0*)
+        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Unexpected token 'IIS://localhost/smtpsvc/1.RelayForAuth' in expression or 
statement.
At line:1 char:8
+ ([ADSI]IIS://localhost/smtpsvc/1.RelayForAuth -like *0*)
+        ~
Missing closing ')' in expression.
At line:1 char:56
+ ([ADSI]IIS://localhost/smtpsvc/1.RelayForAuth -like *0*)
+                                                        ~
Unexpected token ')' in expression or statement.
+ CategoryInfo          : ParserError: (:) [], 
ParentContainsErrorRecordException
+ FullyQualifiedErrorId : UnexpectedToken

2voto

mklement0 Points 12597

Puisque vous êtes nidification (encastrement) " chars. - à passer in extenso à PowerShell - à l'intérieur du syntaxique les guillemets extérieurs ( "..." ), vous devez s'échapper ceux qui sont imbriqués " chars.

Même si PowerShell- en interne ` sert de caractère d'échappement, en appelant le CLI PowerShell ( powershell.exe / pwsh ) de l'extérieur ( cmd.exe ) exige \ -l'évasion de " :

# Embedded " chars. must be \-escaped
powershell -command "([ADSI]\"IIS://localhost/smtpsvc/1\").RelayForAuth -like \"*0*\""

Notez que vous pouvez éviter la nécessité de cet échappement si vous simple -citer les chaînes de caractères à l'intérieur de l'ensemble "..." chaîne de caractères . Bien que cela fonctionne bien dans votre cas, étant donné que vos chaînes de caractères n'ont que in extenso le contenu, notez que c'est généralement seulement une option si aucun interpolation de chaînes de caractères est nécessaire :

# Embedded strings use '...' -> no escaping needed.
powershell -command "([ADSI]'IIS://localhost/smtpsvc/1').RelayForAuth -like '*0*'"

Caveat : L'utilisation de guillemets simples pour entourer la commande globale ( '...' ) fait no fonctionnent comme prévu à partir cmd.exe ce dernier ne les reconnaît pas comme des guillemets, et PowerShell interprète simplement la chaîne comme utilisant son syntaxe pour une chaîne de caractères verbatim, et donc simplement imprime le contenu de la chaîne de caractères.

Pour plus d'informations, voir cette réponse .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X