<p><code>Invoke-Expression</code>, aussi aliasé comme <code>iex</code>. Ce qui suit fonctionnera pour vos exemples <span class="hashtag-raw">#2</span> et <span class="hashtag-raw">#3</span> :</p>
<pre><code class="lang-auto">iex $command
</code></pre>
<p>Certaines chaînes ne s’exécuteront pas telles quelles, comme votre exemple <span class="hashtag-raw">#1</span>, car l’exécutable est entre guillemets. Ceci fonctionnera tel quel, car le contenu de la chaîne correspond exactement à ce que vous taperiez directement depuis une invite de commande PowerShell :</p>
<pre><code class="lang-auto">$command = 'C:\somepath\someexe.exe somearg'
iex $command
</code></pre>
<p>Cependant, si l’exécutable est entre guillemets, vous avez besoin de l’aide de <code>&</code> pour le faire fonctionner, comme dans cet exemple, exécuté depuis la ligne de commande :</p>
<pre><code class="lang-auto">>> &"C:\Program Files\Some Product\SomeExe.exe" "C:\some other path\file.ext"
</code></pre>
<p>Et ensuite dans le script :</p>
<pre><code class="lang-auto">$command = '"C:\Program Files\Some Product\SomeExe.exe" "C:\some other path\file.ext"'
iex "& $command"
</code></pre>
<p>Il est probable que vous pourriez gérer presque tous les cas en détectant si le premier caractère de la chaîne de commande est <code>"</code>, comme dans cette implémentation naïve :</p>
<pre><code class="lang-auto">function myeval($command) {
if ($command[0] -eq '"') { iex "& $command" }
else { iex $command }
}
</code></pre>
<p>Mais vous pourriez trouver d’autres cas qui doivent être invoqués de manière différente. Dans ce cas, vous devrez soit utiliser <code>try{}catch{}</code>, éventuellement pour des types/messages d’exception spécifiques, soit examiner la chaîne de commande.</p>
<p>Si vous recevez toujours des chemins absolus plutôt que des chemins relatifs, vous ne devriez pas avoir beaucoup de cas particuliers, voire aucun, en dehors des 2 ci-dessus.</p>