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

时间:2014-01-10 23:16:08

标签: 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"

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

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

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

3 个答案:

答案 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等浪费了差不多一天......但是它很简单!

希望它有所帮助...