我显然不知道我在做什么。
我终于让这个 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""
我试过这样的数组解决方案:
$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"'。所有参数必须以“-”开头。
我在这里做错了什么新事情吗?