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



我有一个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等上浪费了将近一天……然而它太简单了!

希望它能帮助。。。

最新更新