我尝试使用dirPath提供程序将Windows应用程序部署到远程服务器上的特定路径。我能够使用如下语法将没有问题的网站部署到同一台服务器:
msdeploy.exe -verb:sync -source=iisApp=C:\SomePath -dest:authType=basic,wmsvc=MyServer,userName=MyUser,password=MyPassword,iis=MySite/MyApp -allowUntrusted
但是,在使用dirPath尝试类似命令时,我收到401 Unauthorized错误(原因不明):
msdeploy.exe -verb:sync -source=dirPath=C:\SomePath -dest:authType=basic,wmsvc=MyServer,userName=MyUser,password=MyPassword,dirPath=C:\SomeRemotePath -allowUntrusted
我发现在这里工作的唯一方法是切换到使用computerName语法,如下所示:
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文件中指定%20(例如,默认%20Web%20Site),它会在执行命令之前将其解析回空格,从而导致语法无效。如果我尝试双重转义(分别逃避%,2和0,例如,默认%25%32%30%%25%32%30Site),我将回到401 Unauthorized错误。
那么,是否有一些语法或服务器配置允许我使用" wmsvc = [server]"在这个命令中,假设它不需要有问题的(不可避免的?)站点查询参数?或者有人可以告诉我如何逃避"?site =默认网站"正确执行上面的MSDeploy命令的MSBuild Exec命令?
编辑:在有人建议我将默认网站重命名为没有空格的东西之前,是的,这是有效的,但是我试图找到一种方法来避免这种情况,因为我喜欢通用的解决方案可以使用任何给定服务器上的IIS网站的默认名称。答案 0 :(得分:1)
转义网站参数的正确方法(当使用computerName语法时)来自another关于使用curl的帖子,这是通过加倍来逃避%符号,例如,默认%25%2520Web %25%2520Site。如果没有办法使用wmsvc,因此根本没有指定网站,这对我有用。
编辑:正如The Muffin Man所指出的那样,只需在整个computerName参数(包括Site查询参数)周围加上引号就可以避免对网站名称进行任何棘手的转义。