是否可以从命令行使用非管理员帐户发布/部署Web包?

时间:2015-01-25 00:13:33

标签: msdeploy iis-8 microsoft-web-deploy msdeployserviceagent

标题需要一些扩展。总之,我发现不可能:

  • 将网站部署到IIS 8主机
  • 使用Web部署包
  • 使用VS 2013中的开箱即用发布功能
  • 使用非管理IIS管理员用户,该用户被委派了部署到给定站点的权限

这一切似乎都归结为一个小细节,这一切都搞砸了,但是我应该把我的过程描述到一切都崩溃的地步。

我在VS 2013中创建了一个发布配置文件Publish,配置为发布到Web包。然后,我在开发人员命令提示符下触发以下命令:

msbuild Solution.sln /t:Build /p:DeployOnBuild=true;PublishProfile=Publish;IsDesktopBuild=false

这会经历一个构建过程,现在我在_PublishedWebsites\Web_Package文件夹中看到了预期的包和部署文件。我的下一步是从Web_Package文件夹中运行它:

Web.deploy.cmd /Y /M:https://example.blah:8172/MsDeploy.axd /U:user /P:p@44w0rd /A:Basic

这就是问题所在。这会产生以下扩展命令(为便于阅读而格式化):

msdeploy.exe
    -source:package='.\Web.zip'
    -dest:auto,computerName="https://example.blah:8172/MsDeploy.axd",userName="user",password="p@44w0rd",authtype="Basic",includeAcls="False"
    -verb:sync 
    -disableLink:AppPoolExtension 
    -disableLink:ContentExtension 
    -disableLink:CertificateExtension 
    -setParamFile:".\Web.SetParameters.xml"

执行结果为:

Error Code: ERROR_USER_UNAUTHORIZED
More Information: Connected to the remote computer ("example.blah") using the Web Management Service, but could not authorize. Make sure that you are using the correct user name and password, that the site you are connecting to exists, and that the credentials represent a user who has permissions to access the site.  Learn more at: http://go.microsoft.com/fwlink/?LinkId=221672#ERROR_USER_UNAUTHORIZED.

我可以通过手动重新运行扩展命令并将site参数标记到MsDeploy.axd URL来解决此问题,如下所示:

msdeploy.exe
    -source:package='.\Web.zip'
    -dest:auto,computerName="https://example.blah:8172/MsDeploy.axd?site=example.blah",userName="user",password="p@44w0rd",authtype="Basic",includeAcls="False"
    -verb:sync 
    -disableLink:AppPoolExtension 
    -disableLink:ContentExtension 
    -disableLink:CertificateExtension 
    -setParamFile:".\Web.SetParameters.xml"

但是,我无法通过MSBuild自动生成的Web.deploy.cmd看到任何方法设置此设置。如果我试试这个:

Web.deploy.cmd /Y /M:https://example.blah:8172/MsDeploy.axd?site=example.blah /U:user /P:p@44w0rd /A:Basic

这导致了这一点(再次,格式化以便于阅读):

msdeploy.exe
    -source:package='D:\DEV\Solution\Web\bin\_PublishedWebsites\Web_Package\Web.zip'
    -dest:auto,computerName="https://example.blah:8172/MsDeploy.axd?site",userName="user",password="p@44w0rd",authtype="Basic",includeAcls="False"
    -verb:sync 
    -disableLink:AppPoolExtension 
    -disableLink:ContentExtension 
    -disableLink:CertificateExtension 
    -setParamFile:"D:\DEV\Solution\Web\bin\_PublishedWebsites\Web_Package\Web.SetParameters.xml"  example.blah
Error: Unrecognized argument 'example.blah'. All arguments must begin with "-".
Error count: 1.

我可以使用管理员帐户执行此过程。但似乎非管理员需要此site = querystring值,而自动生成的Web.deploy.cmd就没有这个。

我错过了一些明显的东西吗? IIS管理端是否缺少权限?我确保按照指示in this blog post设置了管理服务委派规则。

2 个答案:

答案 0 :(得分:0)

我无法通过我已经制定的流程找到解决方法。我的解决方案是简单地使用扩展的MSDeploy.exe命令行并直接使用它而不是生成的*.deploy.cmd文件。

当然,如果有人为我的原始问题提供了实际的解决方案,我很乐意将那个标记为答案。在那之前,这是我的解决方案。

答案 1 :(得分:0)

您可以将/ M:参数放在引号中,如下所示:

Web.deploy.cmd /Y "/M:https://example.blah:8172/MsDeploy.axd?site=example.blah" /U:user /P:p@44w0rd /A:Basic