【发布时间】:2009-11-04 09:57:39
【问题描述】:
这是场景:
- Win2003 构建服务器 (CCNET)
- IIS7 目标部署服务器
用于执行此操作的各种 MSBuild 任务(Sdc.Tasks、MSBuild 社区、MSBuild 扩展包)(创建 VDirs、设置 AppPool 属性)不适合至少一个或多个以下原因:
- 不支持 IIS 7。
- 不可能通过域用户名/密码来执行操作。
- Microsoft.Web.Management.dll 在构建服务器上不可用。
- “拒绝访问”错误。
在 IIS 6 上创建 Vdir 没有问题 - 尽管我们实际上是在使用 iisvdir.vbs,因为使用上述任何 MSBuild 任务似乎在执行操作时不支持域用户名/密码身份验证,或者将简单地抛出一个基本的“拒绝访问”消息(尽管在 IIS 6 元数据库上具有适当的权限)。
另外 - 请记住,只要当前身份验证上下文具有正确的权限,如果不指定特定的域用户/密码,各种方法在 IIS 7 上都能完美运行,但出于显而易见的原因,我们不希望我们的所有CCNET 构建在该上下文中运行。
我什至使用 psexec.exe 在盒子上远程运行 appcmd.exe,如果当前的安全上下文具有适当的权限,它也可以正常工作,但是一旦您在 psexec 上指定用户名/密码,就会出现错误消息说“由于权限不足,无法读取配置文件。”指定的用户是域帐户,并且是 2008 服务器上本地管理员组的一部分。
另外 - 我最终推出了自己的 RunAs MSBuild 任务,继承自 Exec 任务并使用编程模拟。然后,我使用它来调用 psexec,而无需在 psexec 中指定用户名和密码,而是通过在对 psexec 进行炮击时进行模拟,但我只是得到一个退出代码 1 - 没有更多详细信息。
如你所见,我已经用尽了所有选项,或者我认为是这样。
如果您有其他想法,或者已经通过非 IIS7 机器上的自动化进程(使用特定的非本地管理员用户)远程管理 IIS7,请告诉我。
【问题讨论】:
标签: .net security iis-7 msbuild psexec