我有一个Web Deploy 3.5包,我想将它部署到远程服务器。如何在MSDeploy.exe命令行中指定站点名称?
到目前为止,我拥有的是:
C:Program Files (x86)IISMicrosoft Web Deploy V3msdeploy.exe
-source:package='package.zip'
-dest:auto,computerName="ServerName",includeAcls="False"
-verb:sync
-disableLink:AppPoolExtension
-disableLink:ContentExtension
-disableLink:CertificateExtension
-setParamFile:"package.SetParameters.xml"
但是站点的名称是在package.SetParamters.xml
文件中指定的,我更喜欢在命令行中设置它。我想部署这个包的一些地方是位于同一服务器上的不同站点,比如我们的Stage和UAT站点。
我已经研究过使用此处描述的iisApp和appHostConfig提供程序:http://technet.microsoft.com/en-us/library/dd569040%28v=ws.10%29.aspx
但我在将它们与包文件结合使用时遇到了问题。
您可以使用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"
要在Powershell中执行同样的操作(请参阅Richard Szalay的回答),您必须对命令行参数处理稍微小心一点,尤其是在涉及空格的情况下。我发现最好将它们作为一个数组传递,其中所需的命令行参数有效地拆分在空格字符上。请注意,下面的行是逗号分隔的,并且参数名称"IIS Web应用程序"是拆分的。为了提高可读性,我把那个留在了一行。
$msdeploy = "C:Program Files (x86)IISMicrosoft Web Deploy V3msdeploy.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
更新
当我回去参数化网站名称时,我遇到了问题。因为我在字符串中使用了单引号,所以我选择使用串联而不是字符串插值。不幸的是,分隔数组中元素的逗号似乎是在连接之前计算的。结果是,我没有在数组元素中连接字符串,而是将新元素连接到数组中。我的解决方案是使用括号将数组元素括起来,并强制首先执行连接。
$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 + '"');
我已经试过了这里的所有答案(基本上是互联网上的所有答案),没有一个对我有效。不知道为什么。然后我找到了这个页面,它解释了如何将MSDeploy用于备份(我只是将其反转为用于部署)。秘密来源是">contentPath"。这有点误导,因为在这种情况下,磁盘上没有路径(但我看到过使用它传递托管站点物理路径的例子)。但我不想使用物理路径。你不必这么做!诀窍是:它可以包含网站或子网站(在IIS yoursite.com/shop中,所以我猜它是IIS中的一个路径)名称
用于备份:
msdeploy –verb:sync -source:contentPath="yoursite.com" -dest:package=c:Backupsyoursite.zip
部署用途:
msdeploy –verb:sync -source:package=c:Deploymentyoursite.zip -dest:contentPath="yoursite.com"
我在declareParam、setParam等上浪费了将近一天……然而它太简单了!
希望它能帮助。。。