如何在MSDeploy.exe命令行上设置目标网站

dth*_*her 13 msdeploy webdeploy

我有一个Web Deploy 3.5软件包,我想部署到远程服务器.如何在MSDeploy.exe命令行上指定站点的名称?

这是我到目前为止所拥有的:

C:\Program Files (x86)\IIS\Microsoft Web Deploy V3\msdeploy.exe
    -source:package='package.zip' 
    -dest:auto,computerName="ServerName",includeAcls="False" 
    -verb:sync 
    -disableLink:AppPoolExtension 
    -disableLink:ContentExtension 
    -disableLink:CertificateExtension 
    -setParamFile:"package.SetParameters.xml"
Run Code Online (Sandbox Code Playgroud)

但是该文件的名称是在package.SetParamters.xml文件中指定的,我更喜欢在命令行中设置它.我想部署此软件包的一些地方是位于同一服务器上的不同站点,例如我们的Stage和UAT站点.

我已经看过使用这里描述的iisApp和appHostConfig提供程序:http://technet.microsoft.com/en-us/library/dd569040%28v=ws.10%29.aspx

但是我在将这些与包文件结合使用时遇到了麻烦.

Ric*_*lay 21

您可以使用setParam以下方式覆盖它

msdeploy.exe
    -source:package='package.zip' 
    -dest:auto,computerName="ServerName",includeAcls="False" 
    -verb:sync 
    -disableLink:AppPoolExtension 
    -disableLink:ContentExtension 
    -disableLink:CertificateExtension 
    -setParamFile:"package.SetParameters.xml"
    -setParam:name="IIS Web Application Name",value="site name"
Run Code Online (Sandbox Code Playgroud)

  • 实际上,我在TeamCity中使用命令行运行程序,这是我的持续集成服务器.所以我目前没有在PowerShell环境中这样做.但它一直试图在"IIS Web应用程序名称"之间的空格上拆分参数. (3认同)
  • 我发现如果我也使用setParamFile,则setParam不允许我覆盖自定义的必需参数。我有一个仅使用setParam的msdeploy.exe命令行,但是将setParamFile附加到它之后,它抱怨各种必需的自定义参数“参数不能为null或为空”。如果我删除setParam项目,而是将它们放在SetParameters.xml中,则它将再次起作用。但是似乎您不能同时拥有两者,至少没有必需的自定义参数。 (2认同)

Sco*_*nro 13

要在Powershell中做同样的事情(参见Richard Szalay的回答),你必须对命令行参数处理有点小心 - 特别是涉及空格的地方.我发现最好将它们作为一个数组传递,其中所需的命令行参数在空格字符上有效地分割.请注意,下面的行以逗号分隔,并且分割参数名称"IIS Web Application".我把那个放在一行上以提高可读性.

$msdeploy = "C:\Program Files (x86)\IIS\Microsoft Web Deploy V3\msdeploy.exe";

$msdeployArguments = 
    '-source:package="package.zip"',
    '-dest:auto,computerName="<ServerName>",includeAcls="False"',
    '-verb:sync',
    '-disableLink:AppPoolExtension',
    '-disableLink:ContentExtension',
    '-disableLink:CertificateExtension',
    '-setParam:name="IIS', 'Web', 'Application', 'Name",value="<WebsiteName>"'

& $msdeploy $msdeployArguments
Run Code Online (Sandbox Code Playgroud)

更新

当我回到网站Name的参数化时,我遇到了问题.因为我使用单引号作为字符串,所以我选择使用连接而不是字符串插值.不幸的是,分隔数组中元素的逗号似乎已经在连接之前进行了评估.结果是,不是在数组元素中连接字符串,而是将新元素连接到数组.我的解决方案是使用括号括起数组元素并强制首先执行连接.

$msdeployArguments = 
    '-source:package="package.zip"',
    ('-dest:auto,computerName="' + $webServerName + '",includeAcls="True"'),
    '-verb:sync',
    '-disableLink:AppPoolExtension',
    '-disableLink:ContentExtension',
    '-disableLink:CertificateExtension',
    '-setParam:name="IIS', 'Web', 'Application', ('Name",value="' + $websiteName + '"');
Run Code Online (Sandbox Code Playgroud)