这是场景:
- 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,请告诉我。