O que há com esta linha de comando do PowerShell entre aspas / escapadas?

Eu obviamente não sei o que estou fazendo.

Finalmente consegui que este comando do PowerShell funcionasse. Mas não consigo descobrir por que funciona.

Minha preocupação é com os caracteres "" finais:

    &"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""

Por que preciso de aspas duplas?

Meu IDE (PowerGUI) diz que a linha não foi finalizada corretamente, mas é a única maneira de executar o comando conforme desejado.

O que é que eu - e o IDE - não sabemos sobre citações no PowerShell?

Um pouco de saída de ecos:

Se eu correr:

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

Eu recebo:

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

Se eu executar sem aspas duplas, recebo:

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>

Outra coisa a notar é que o comando acima funciona apenas se usar = em vez de: no último argumento.

Isso não vai funcionar:

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

Eu tentei a solução de matriz como esta:

$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

Ainda obtenho o mesmo erro:

Erro: argumento não reconhecido '"-postSyncOnSuccess: runCommand = powershell -Command c: \ temp \ kslog \ remotetasks.ps1 Deploy"'. Todos os argumentos devem começar com "-".

Estou fazendo alguma coisa nova de errado aqui?

questionAnswers(3)

yourAnswerToTheQuestion