1

这是场景:

  • 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,请告诉我。

4

1 回答 1

2

Right. After a bit more messing around, it looks like Windows 2008 User Account Control (UAC) is getting in the way. If you are using any other administrator account than the built-in Administrator, the UAC's Admin Approval mode kicks in.

Obviously in an automated script (non-interactive mode), you will be denied access, as you do not have an option to click 'Continue' on the UAC dialog.

The only alternative is to edit the Security Options for the local machine in Group Policy (gpedit.msc) and set 'Run Administrators in Admin Approval Mode' from Enabled to Disabled.

Reboot, and you're fine.

It would actually be better and more secure if you could set UAC exceptions for Admin Approval mode on specific Administrator accounts. If you're reading, MS - put it on the feature list!

于 2009-11-04T11:01:44.517 回答