我有一个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"
但是网站的名称是在package.SetParamters.xml
文件中指定的,我更喜欢在命令行中设置它。我想部署此软件包的一些地方是位于同一服务器上的不同站点,例如我们的Stage和UAT站点。
我已经看过使用此处描述的iisApp和appHostConfig提供程序: http://technet.microsoft.com/en-us/library/dd569040%28v=ws.10%29.aspx
但是我在将这些文件与包文件结合使用时遇到了麻烦。
答案 0 :(得分:19)
您可以使用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"
答案 1 :(得分:13)
要在Powershell中执行相同的操作(请参阅Richard Szalay's answer),您必须对命令行参数处理稍微小心 - 尤其是涉及空格的地方。我发现最好将它们作为一个数组传递,其中所需的命令行参数在空格字符上有效地分割。请注意,下面的行以逗号分隔,并且分割参数名称“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
<强>更新强>
当我回到网站Name的参数化时,我遇到了问题。因为我对字符串使用了单引号,所以我选择使用连接而不是string interpolation。不幸的是,分隔数组中元素的逗号似乎已经在连接之前进行了评估。结果是,不是在数组元素中连接字符串,而是将新元素连接到数组。我的解决方案是使用括号括起数组元素并强制首先执行连接。
$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 + '"');
答案 2 :(得分:1)
我已经从这里尝试了所有的答案(基本上所有的答案都来自互联网)他们都没有为我工作。不知道为什么。 然后我找到了this页面,其中解释了如何将MSDeploy用于BackUps(我只是将其反转以用于部署)。秘密souse是&#34; contentPath &#34;。这有点误导,因为在这种情况下不是磁盘上的路径(但是我已经看过使用它传递托管站点物理路径的示例)。但我并不想使用物理路径。而且你不必!诀窍是:它可以包含WebSite或子站点(在IIS中yoursite.com/shop,所以我猜它是IIS中的路径)名称。
备份用法:
msdeploy –verb:sync -source:contentPath="yoursite.com" -dest:package=c:\Backups\yoursite.zip
部署用法:
msdeploy –verb:sync -source:package=c:\Deployment\yoursite.zip -dest:contentPath="yoursite.com"
我用declareParam,setParam等浪费了差不多一天......但是它很简单!
希望它有所帮助...