以下是该方案:
用于执行此操作的各种MSBuild任务(Sdc.Tasks,MSBuild社区,MSBuild扩展包)(创建VDirs,设置AppPool属性)不适合至少一个或多个以下原因:
在IIS 6上创建Vdirs没有问题 - 虽然我们实际上是在向iisvdir.vbs发送shell,因为使用上述任何MSBuild任务似乎在执行操作时不支持域用户名/密码身份验证或只会抛出一个基本的“拒绝访问”消息(尽管对IIS 6元数据库具有适当的权限)。
另外 - 请记住,只要当前的身份验证上下文具有正确的权限,如果不指定特定的域用户/ pw,各种方法在IIS 7上都能正常工作,但出于显而易见的原因,我们不希望所有的方法都使用CCNET构建在该上下文中运行。
我甚至使用psexec.exe在远程框上运行appcmd.exe,如果当前安全上下文具有适当的权限,也可以正常工作,但只要在psexec上指定用户名/密码,就会出现错误消息说“由于权限不足,无法读取配置文件”。指定的用户是域帐户,是2008服务器上本地Administrators组的一部分。
另外 - 我最终编写了自己的RunAs MSBuild任务,继承了Exec任务并使用了程序化模拟。然后我使用它来调用psexec,而不是在psexec中指定用户名和密码,而是通过冒充shell到psexec时进行模拟,但我只是得到一个1的exitcode - 没有任何更多细节。
如你所见,我几乎已经筋疲力尽所有选择,或者我认为。
如果你能想到其他任何东西,或者已经通过非IIS7盒子上的自动化进程远程管理IIS7(使用特定的非本地管理员用户),请告诉我。
答案 0 :(得分:2)
右。更糟糕的是,看起来Windows 2008用户帐户控制(UAC)正在阻碍。如果您使用的是除内置管理员之外的任何其他管理员帐户,则会启动UAC的管理员批准模式。
显然,在自动脚本(非交互模式)中,您将被拒绝访问,因为您无法在UAC对话框中单击“继续”。
唯一的选择是在组策略(gpedit.msc)中编辑本地计算机的安全选项,并将“在管理员批准模式下运行管理员”设置为“已启用”。
重新启动,你很好。
如果您可以在特定管理员帐户上为管理员批准模式设置UAC例外,那么实际上会更好,更安全。如果您正在阅读,MS - 将其放在功能列表中!