​​Что случилось с этим цитированием / экранированием командной строки PowerShell?

Я явно не знаю, что делаю.

Я наконец-то получил эту команду PowerShell для работы. Но я не могу понять, почему это работает.

Меня беспокоят последние символы "":

    &"C:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe" `
    -verb:sync `
    -source:contentPath="$build_directory\deploy" `
    -dest:contentPath="$server_temp_directory,computerName=$server,username=$server_username,password=$server_password" `
    -verbose `
    -postSync=runCommand="powershell -NoLogo -NoProfile -Command $server_temp_directory\remotetasks.ps1 Deploy""

Зачем мне нужны двойные двойные кавычки?

Моя IDE (PowerGUI) сообщает, что строка не завершена правильно, но это единственный способ заставить команду работать так, как нужно.

Что это, что я - и IDE - не знаю о цитировании в PowerShell?


Небольшой вывод из echoargs:

Если я запускаю:

echoargs -postSync=runCommand="powershell -NoLogo -NoProfile -Command $server_temp_directory\remotetasks.ps1 Deploy""

Я получаю:

Arg 0 is <-postSync=runCommand=powershell -NoLogo -NoProfile -Command \remotetasks.ps1 Deploy>

Если я запускаю без двойных двойных кавычек , Я получаю:

Arg 0 is <-postSync=runCommand=powershell>
Arg 1 is <-NoLogo>
Arg 2 is <-NoProfile>
Arg 3 is <-Command>
Arg 4 is <\remotetasks.ps1>
Arg 5 is <Deploy>

Еще одна вещь, на которую следует обратить внимание, это то, что приведенная выше команда работает только в том случае, если она использует = вместо : в последнем аргументе.

Это не сработает:

-postSync:runCommand="powershell -NoLogo -NoProfile -Command $server_temp_directory\remotetasks.ps1 Deploy""

I попробовали решение с массивом следующим образом:

$arguments = @("-verb:sync",
               "-source:contentPath=$build_directory\deploy",
               "-dest:contentPath=$server_temp_directory,computerName=$server,username=$server_username,password=$server_password",
               "-verbose",
               "-postSyncOnSuccess:runCommand=powershell -Command $server_temp_directory\remotetasks.ps1 Deploy")
&"C:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe" $arguments

Я все еще получаю ту же ошибку:

Ошибка: нераспознанный аргумент '"-postSyncOnSuccess: runCommand = powershell -Command c: \ temp \ kslog \ remotetasks.ps1 Deploy"'. Все аргументы должны начинаться с «-».

Я здесь что-то делаю неправильно?

12
задан Peter Mortensen 4 March 2019 в 20:02
поделиться