web-dev-qa-db-fra.com

Comment échapper aux esperluettes, points-virgules et accolades dans les paramètres PowerShell en ligne de commande?

J'utilise un script PowerShell pour générer un fichier de configuration avec des mots de passe de base de données, etc. L'utilisation normale de ce script est de générer et d'utiliser un mot de passe, mais pour un moment éphémère, j'ai besoin d'accéder à la base de données d'un autre développeur, donc je dois passer le mot de passe dans le script powershell.

Le problème est que le mot de passe est du charabia qui inclut des esperluettes, des points-virgules et des accolades. Comment puis-je transmettre cela à une invocation en ligne de commande de PowerShell? ( Cette réponse et ceci autre réponse sont utiles, mais n'aident pas avec les points-virgules et les accolades.)

Voici ce que j'ai essayé:

powershell .\makeConfig.ps1 -password "xxx<xxxx;xxxxx&x.xxxx}xx/xxx" -otherparam 3

Résultat: un message d'erreur: le caractère esperluette (&) n'est pas autorisé. L'opérateur & est réservé pour une utilisation future; mettez une esperluette entre guillemets doubles ("&") pour la faire passer dans une chaîne.

powershell .\makeConfig.ps1 -password "xxx<xxxx;xxxxx`"&`"x.xxxx}xx/xxx" -otherparam 3

Résultat: effectuer une écriture-hôte du mot de passe $ ne donne que la chaîne au point-virgule. De plus, -otherparam a sa valeur par défaut plutôt que la valeur que j'ai transmise à la ligne de commande.

powershell .\makeConfig.ps1 -password "xxx<xxxx`;xxxxx`"&`"x.xxxx}xx/xxx" -otherparam 3

Résultat: write-Host $ password imprime maintenant jusqu'au premier backtick avant le devis. Et oui, il sort le backtick, ce qui semble montrer que tout est en train de se tromper. Oh, et l'une des autres fonctions appelées dans le script a levé une exception que je n'ai jamais vue auparavant (exception appelant "AcquireToken" avec "4" argument (s): "authentification_annulée: authentification annulée par l'utilisateur"), ce qui suggère que le param l'analyse a été complètement arrosée d'une manière nouvelle et fascinante. Voici ce que le mot de passe write-Host $ a produit:

xxx<xxxx;xxxxx`


powershell .\makeConfig.ps1 -password "xxx<xxxx`";`"xxxxx`"&`"x.xxxx}xx/xxx" -otherparam 3

Résultat: write-Host $ password imprime maintenant jusqu'au premier backtick avant le devis. Et le deuxième paramètre est dans l'état par défaut. (c'est-à-dire, même résultat que la dernière fois.) Du côté positif, l'exception levée dans l'exemple précédent ne s'est pas produite.

Alors, comment puis-je passer des chaînes arbitraires ASCII aux paramètres de chaîne PowerShell à partir de la ligne de commande Windows? Ou au moins, comment puis-je échapper les points-virgules, les esperluettes et les accolades?

19
PotatoEngineer

J'exécute firebase en utilisant un script PowerShell. J'ai résolu le problème en utilisant des guillemets triples comme ceci: firebase deploy --token "$firebaseToken" --project "$firebaseProject" --message """$releaseMessage""". L'URL est dans le $releaseMessage, et l'esperluette ne pose plus de problème

0
Noxxys