Gdy PowerShell widzi polecenie zaczynające się od łańcucha, po prostu ocenia ten ciąg, tzn. Zwykle wyświetla go na ekranie, na przykład:
PS> "Hello World"
Hello World
Jeśli chcesz, aby PowerShell interpretował ciąg jako nazwę polecenia, użyj operatora wywołania (&) w następujący sposób:
PS> & 'C:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe'
Następnie prawdopodobnie będziesz musiał jedynie cytować pary parametrów / argumentów zawierające spacje i / lub znaki cudzysłowu. Gdy wywołujesz plik EXE taki jak ten ze złożonymi argumentami wiersza poleceń, zwykle bardzo pomocne jest posiadanie narzędzia, które pokaże, w jaki sposób PowerShell wysyła argumenty do pliku EXE. PowerShell Community Extensions ma takiego narzędzia. Nazywa się to echoargs. Po prostu zamienisz plik EXE na echoargs - pozostawiając wszystkie argumenty na miejscu, a pokaże Ci, jak plik EXE odbierze argumenty, na przykład:
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>
Korzystając z echa, możesz eksperymentować, dopóki nie zrobisz tego poprawnie, na przykład:
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;>
Okazuje się, że zbyt mocno starałem się zachować podwójne cudzysłowy wokół ciągu połączenia. Najwyraźniej nie jest to konieczne, ponieważ nawet cmd.exe je usunie.
BTW, czapki z głów przed zespołem PowerShell. Były bardzo pomocne w pokazaniu mi specyficznej inkantacji pojedynczych i podwójnych cudzysłowów, aby uzyskać pożądany rezultat - jeśli trzeba było utrzymać wewnętrzne podwójne cudzysłowy na miejscu. :-) Zdają sobie również sprawę z tego, że jest to obszar bólu, ale kieruje nimi liczba osób dotkniętych konkretnym problemem. Jeśli jest to dla Ciebie problem, zagłosuj za zgłoszeniem błędu programu PowerShell .
Aby uzyskać więcej informacji na temat sposobu analizowania programu PowerShell, zobacz moją serię blogów dotyczących efektywnego programu PowerShell - w szczególności punkt 10 - „Omówienie trybów analizy programu PowerShell”
AKTUALIZACJA 4/4/2012: Ta sytuacja staje się znacznie łatwiejsza w PowerShell V3. Zobacz ten post na blogu, aby uzyskać szczegółowe informacje .