Коли 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 викреслить їх.
BTW, капелюхи для команди PowerShell. Вони були дуже корисними, показавши мені конкретний запас одинарних та подвійних лапок, щоб отримати бажаний результат - якщо вам потрібно було зберегти внутрішні подвійні лапки. :-) Вони також усвідомлюють, що це область болю, але їх визначає кількість людей, які впливають на певну проблему. Якщо це біль для вас, тоді, будь ласка, проголосуйте за подання про помилку PowerShell .
Для отримання додаткової інформації про те, як PowerShell розбирає, перегляньте мою серію ефективних блогів PowerShell - зокрема пункт 10 - "Розуміння режимів розбору PowerShell"
ОНОВЛЕННЯ 4/4/2012: Ця ситуація стає набагато простішою в PowerShell V3. Детальну інформацію див. У цій публікації в блозі .