MSDEPLOY powershell脚本参数不起作用

问题描述 投票:1回答:1

我正在尝试将站点(基本上是zip文件)从我的机器部署到远程机器。在实施实际的远程部署之前,我正在进行相同的测试,并且正在使用Powershell处理msdeploy命令行代码。

稍后,我将使用C#语言配置此代码,并执行该代码以自动进行部署。

现在,我遇到的错误称为

$msdeploy = "C:\\Program Files\\IIS\\Microsoft Web Deploy V3\\msdeploy.exe"
            $package = "C:\Deploy\Test\Test.zip"
            $compname = "test_vm02"
            $appname = "Default Web Site/Test"
            $appvalue = "Test\"
            $md = $("`"{0}`" -verb:sync -source:package=`"{1}`" -dest=auto,ComputerName=`"{2}`" -setParam=name=`"{3}`",value=`"{4}`" -allowUntrusted" -f $msdeploy, $package, $compname, $appname, $appvalue)
        cmd.exe /C $md

这给出错误信息,表明源不支持参数'Default Web Site/Test'Must be one of ()

我也将默认网站替换为IIS Web Application Name,在这种情况下,该网站也无法正常工作,并引发了相同的错误。

非常感谢任何帮助!

powershell cmd msdeploy
1个回答
0
投票

PowerShell对传递给外部程序的参数中引号的处理是fundamentally broken,但是如果涉及另一个引号级别,情况会变得更加复杂,例如通过[C0对msdeploy.exeindirect调用]。

通常没有理由通过cmd.exe调用外部程序;而是将其命名为直接从PowerShell,如果程序名称为quoted或通过variable给出,则需要在命令行前面加上cmd /c,[ C0]

注意:行尾&字符。是连续行,仅用于可读性;忽略损坏的语法突出显示。

call operator

请注意,需要在`$package = 'C:\Deploy\Test\Test.zip' $compname = 'test_vm02' $appname = 'Default Web Site/Test' # !! If a value ends in '\' you must *double* the '\' if the value # !! ends up just before a " in the ultimate command line. $appvalue = 'Test\\' & "C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe" ` -verb:sync ` -source:package=`"$package`" ` `-dest=auto,ComputerName=`"$compname`" ` `-setParam=name=`"$appname`",value=`"$appValue`" ` -allowUntrusted 选项之前先进行`转义-,这是-dest中描述的错误的解决方法。

[保留参数名称(例如-setParam),否则不加引号,并将其参数括在显式的嵌入式引号(this GitHub issue)中,以确保整个令牌通过类似-source:package的外观传递,某些程序尤其是`" ],也可能需要-source:package="C:\Deploy\Test\Test.zip"。如果仅使用msiexec,并且msdeploy.exe的值包含嵌入式空格,那么PowerShell将在幕后将whole标记双引号,并传递类似-source:package=$package

© www.soinside.com 2019 - 2024. All rights reserved.