Когда PowerShell видит команду, начинающуюся со строки, он просто оценивает строку, то есть обычно выводит ее на экран, например:
PS> "Hello World"
Hello World
Если вы хотите, чтобы PowerShell интерпретировал строку как имя команды, используйте оператор вызова (&) следующим образом:
PS> & 'C:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe'
После этого вам, вероятно, нужно только заключить в кавычки пары параметр / аргумент, содержащие пробелы и / или символы кавычек. Когда вы вызываете такой EXE-файл со сложными аргументами командной строки, обычно очень полезно иметь инструмент, который покажет вам, как PowerShell отправляет аргументы в EXE-файл. PowerShell Community Extensions имеет такой инструмент. Это называется эхомарки. Вы просто замените EXE-файл на echoargs, оставив все аргументы на месте, и он покажет вам, как EXE-файл получит эти аргументы, например:
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>
Используя echoargs, вы можете экспериментировать, пока не сделаете все правильно, например:
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;>
Оказывается, я слишком старался, чтобы сохранить двойные кавычки вокруг строки подключения. Очевидно, что в этом нет необходимости, потому что даже cmd.exe удалит их.
Кстати, снимаю шляпу перед командой PowerShell. Они очень помогли мне показать конкретное заклинание одинарных и двойных кавычек, чтобы получить желаемый результат - если вам нужно было сохранить внутренние двойные кавычки на месте. :-) Они также понимают, что это - область боли, но они движимы количеством людей, затронутых определенной проблемой. Если это для вас проблема, пожалуйста, проголосуйте за это сообщение об ошибке PowerShell .
Для получения дополнительной информации о синтаксическом анализе PowerShell см. Мою серию блогов Effective PowerShell, в частности, пункт 10 «Общие сведения о режимах синтаксического анализа PowerShell».
ОБНОВЛЕНИЕ 4/4/2012: С этой ситуацией намного легче справиться в PowerShell V3. Смотрите этот блог для деталей .