2013-03-12 52 views
3

我想使用dirPath提供程序将Windows应用程序部署到远程服务器上的特定路径。我能够没有问题的网站部署到这个相同的服务器,使用类似下面的语法:尝试使用dirPath类似的命令时如何在dirPath提供程序中使用“wmsvc = [server]”语法?

msdeploy.exe -verb:sync -source=iisApp=C:\SomePath -dest:authType=basic,wmsvc=MyServer,userName=MyUser,password=MyPassword,iis=MySite/MyApp -allowUntrusted

不过,我得到401未经授权错误(原因不明) :

msdeploy.exe -verb:sync -source=dirPath=C:\SomePath -dest:authType=basic,wmsvc=MyServer,userName=MyUser,password=MyPassword,dirPath=C:\SomeRemotePath -allowUntrusted

我发现在这里工作的唯一一件事就是切换到使用计算机名语法,就像这样:

msdeploy.exe -verb:sync -source=dirPath=C:\SomePath -dest:authType=basic,computerName=https://MyServer:8172/msdeploy.axd?site=MySite,userName=MyUser,password=MyPassword,dirPath=C:\SomeRemotePath -allowUntrusted

这样可以,但computerName要求网站作为查询字符串参数传递,而本例中的“MySite”实际上是“默认网站”。考虑到我实际上是用MSBuild文件生成这个命令行(并用Exec语句执行它),我无法为我的生活弄清楚如何正确地转义空间。如果我在MSBuild文件(例如Default%20Web%20Site)中指定%20,它会在执行该命令之前将其解析回空格,这会导致语法无效。如果我尝试双重转义(分别转义%,2和0,例如Default%25%32%30Web%25%32%30Site),我会回到401 Unauthorized错误。

那么,是否有一些语法或服务器配置允许我在此命令中使用“wmsvc = [server]”,因为它不需要有问题的(不可避免的?)站点查询参数?或者有人可以告诉我如何在上面执行MSDeploy命令的MSBuild Exec命令中正确地转义“?site = Default Web Site”?

编辑:之前有人建议我只是将默认网站重命名为没有空格的东西,是的,这有效,但我试图找到一种方法来避免这种情况,因为我想要一个可以工作的通用解决方案使用任何给定服务器上的IIS网站的默认名称。

+0

难道你不能只将computerName值放在双引号中吗? 'computerName =“https://.../Default网站”' – 2014-05-27 17:54:40

+1

松饼人!我认识你吗? – 2014-05-27 18:06:35

+0

我不知道,你告诉我。 – 2014-05-27 19:17:30

回答

1

转发站点参数的正确方法(使用computerName语法时)来自another SO post有关curl的使用,即通过将其加倍来转义%符号,例如Default%25%2520Web%25% 2520Site。如果没有办法使用wmsvc,因此根本不指定网站,这对我来说很有用。

编辑:正如松饼人指出的,只需在整个computerName参数(包括站点查询参数)周围加上引号就可以避免需要做任何棘手的转义网站名称。