Comment exécuter un fichier EXE dans PowerShell avec des paramètres contenant des espaces et des guillemets

Comment exécuter un fichier EXE dans PowerShell avec des paramètres contenant des espaces et des guillemets


Source : Stack Overflow [powershell]

Lorsque PowerShell rencontre une commande commençant par une chaîne, il évalue simplement la chaîne, c’est-à-dire qu’il l’affiche généralement à l’écran, par exemple :

PS> "Hello World"
Hello World

Si vous souhaitez que PowerShell interprète la chaîne comme un nom de commande, utilisez l’opérateur d’appel (&) comme ceci :

PS> & 'C:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe'

Après cela, vous n’aurez probablement besoin de mettre entre guillemets que les paires paramètre/argument contenant des espaces et/ou des guillemets. Lorsque vous invoquez un fichier EXE de cette manière avec des arguments de ligne de commande complexes, il est généralement très utile de disposer d’un outil qui vous montrera comment PowerShell envoie les arguments au fichier EXE. Les PowerShell Community Extensions disposent d’un tel outil. Il s’appelle echoargs. Vous remplacez simplement le fichier EXE par echoargs - en laissant tous les arguments en place, et il vous montrera comment le fichier EXE recevra les arguments, par exemple :

PS> echoargs -verb:sync -source:dbfullsql="Data Source=mysource;Integrated Security=false;User ID=sa;Pwd=sapass!;Database=mydb;" -dest:dbfullsql="Data Source=.\mydestsource;Integrated Security=false;User ID=sa;Pwd=sapass!;Database=mydb;",computername=10.10.10.10,username=administrator,password=adminpass

Arg 0 is <-verb:sync>
Arg 1 is <-source:dbfullsql=Data>
Arg 2 is <Source=mysource;Integrated>
Arg 3 is <Security=false;User>
Arg 4 is <ID=sa;Pwd=sapass!;Database=mydb;>
Arg 5 is <-dest:dbfullsql=Data>
Arg 6 is <Source=.\mydestsource;Integrated>
Arg 7 is <Security=false;User>
Arg 8 is <ID=sa;Pwd=sapass!;Database=mydb; computername=10.10.10.10 username=administrator password=adminpass>

En utilisant echoargs, vous pouvez expérimenter jusqu’à obtenir le bon résultat, par exemple :

PS> echoargs -verb:sync "-source:dbfullsql=Data Source=mysource;Integrated Security=false;User ID=sa;Pwd=sapass!;Database=mydb;"
Arg 0 is <-verb:sync>
Arg 1 is <-source:dbfullsql=Data Source=mysource;Integrated Security=false;User ID=sa;Pwd=sapass!;Database=mydb;>

Il s’avère que j’essayais

(Réponse tronquée)