我们正在使用Windows Server 2012 / IIS8上的Powershell自动化我们的IIS服务器构建和配置。
脚本创建网站,应用程序池,设置权限,绑定证书等。脚本由包含所有网站详细信息的XML文件驱动。脚本配置除了内容之外运行网站所需的一切,然后将内容复制到相关目录中。
一切正常,但目录中没有内容(仅用于测试目的的默认html页面)。
如果我们将应用程序复制到目录并尝试使用Powershell进一步配置站点,则使用.NET 2和3.5的应用程序会抛出以下错误:
错误:定义了一个重复的'system.web.extensions / scripting / scriptResourceHandler'部分
+ CategoryInfo : NotSpecified: (:) [Set-WebConfiguration], COMException
+ FullyQualifiedErrorId : System.Runtime.InteropServices.COMException,Microsoft.IIs.PowerShell.Provider.SetConfigurationCommand
+ PSComputerName : xxxxxxxxxxx
我已经彻底研究了这个主题,看来问题是System.Web.Extensions被移动到了.NET 4.0应用程序的machine.config中,这意味着在web.config中再次定义了一个部分是重复的。这是有道理的,除了错误是使用设置为.NET 2.0的应用程序池运行的.NET 2.0或3.5应用程序。
我认为问题在于Powershell本身(在Windows Server 2012上)使用CLR 4.0运行,因此在进行IIS配置更改时,它需要分层次地解析配置文件(从machine.config到web.config)。它认为System.Web.Extensions是重复的,即使在运行时它不是(因为运行时将是2.0版本)。更改运行应用程序池的.NET版本对此问题没有任何影响,因为这只是关于应用程序运行时。
通过限制Powershell仅使用CLR 2.0似乎有一种解决方法,但这对于.NET 4.0应用程序不起作用,然后.NET 4.0应用程序将报告缺少的部分定义。因此,修复一个版本的问题会在另一个版本中产生问题。
我的问题是,有没有人经历过这种情况,是否有任何解决办法允许Powershell在应用程序使用混合.NET版本时配置IIS?
我花了很多时间来解决这个问题,因此非常感谢任何帮助。
更新: 仍然没有进一步的这个错误,我想由于缺乏评论,这不是一个容易的。
我正在浏览IIS 8 Powershell文档,可以看到他们在Set-WebConfiguration命令中添加了一个Clr属性,但这没有任何效果,因为我试图修改的元素(在这种情况下是HTTP重定向)最终在applicationhost.config文件中,Powershell抛出一个警告:
WARNING: Ignoring -Clr value when PSPath is not 'MACHINE/WEBROOT' or 'MACHINE'.
当修改不是machine.config或root web.config。
时似乎没有办法解决这个问题(我认为这是一个错误)也许在任何更新之前重命名应用程序目录中的web.config文件是Powershell的答案,不会尝试解析配置。任何人对此都有任何想法。