[Scripting] Как выполнить произвольную командную строку из строки?


Answers

Также см. Отчет Microsoft Connect о том, как blummin «сложно использовать PowerShell для запуска команд оболочки (о, ирония).

http://connect.microsoft.com/PowerShell/feedback/details/376207/

Они предлагают использовать --% , чтобы заставить PowerShell перестать пытаться интерпретировать текст вправо.

Например:

MSBuild /t:Publish --% /p:TargetDatabaseName="MyDatabase";TargetConnectionString="Data Source=.\;Integrated Security=True" /p:SqlPublishProfilePath="Deploy.publish.xml" Database.sqlproj
Question

Я могу выразить свою потребность в следующем сценарии: Напишите функцию, которая принимает строку, которая будет запущена как родная команда.

Это не слишком задуманная идея: если вы взаимодействуете с другими утилит командной строки из другого места в компании, которые предоставляют вам команду для запуска дословной. Поскольку вы не контролируете команду, вам необходимо принять любую действительную команду в качестве входной . Это основные икоты, которые я не мог легко преодолеть:

  1. Команда может выполнять программу, проживающую в пути с пробелом в ней:

    $command = '"C:\Program Files\TheProg\Runit.exe" Hello';
    
  2. Команда может иметь параметры с пробелами в них:

    $command = 'echo "hello world!"';
    
  3. Команда может иметь как одиночные, так и двойные тики:

    $command = "echo `"it`'s`"";
    

Есть ли какой-либо чистый способ сделать это? Я только смог разработать щедрые и уродливые обходные пути, но для языка сценариев я чувствую, что это должно быть мертвым простым.






Links