【发布时间】:2018-05-23 18:19:55
【问题描述】:
任何想法如何使用 IISAdministration 模块将新元素添加到 applicationHost.config 的根目录?
我拼凑了当前代码(为简洁起见进行了编辑)以在 IIS 10 中引导一个新站点。
Import-Module IISAdministration
$Manager = Get-IISServerManager
$Name = "my.sitedomain.foo"
$Config = $Manager.GetApplicationHostConfiguration()
$Config.GetSection("system.webServer/security/dynamicIpSecurity",$Name)
$DIPSecurity = $Config.GetSection("system.webServer/security/dynamicIpSecurity",$Name)
if($DIPSecurity -ne $null){
$DIPSecurity.GetChildElement("denyByRequest") | %{
$_.SetAttributeValue("enabled",$true)
$_.SetAttributeValue("maxRequests",20)
$_.SetAttributeValue("requestIntervalInMilliseconds",200)
}
}
当通过 IIS 管理器修改了 dynamicIpSecurity 元素后,xml 就会被添加到配置文件中。但是,开箱即用的 IIS applicationHost.config 没有该站点的 <location> 子元素。
目的是检查位置元素是否存在,如果不存在,则添加如下内容
<location path="my.sitedomain.foo">
<system.webServer>
<security>
<dynamicIpSecurity>
<denyByConcurrentRequests enabled="true" />
<denyByRequestRate enabled="true" />
</dynamicIpSecurity>
</security>
</system.webServer>
</location>
非常感谢, 詹姆斯
【问题讨论】:
-
一般来说,你不能。将由 IIS API 决定将设置保存在何处以及是否需要位置标记。在你的情况下,如果你想管理一个网站,上面的代码是错误的(你不应该打电话给
GetApplicationHost...。 -
感谢@Lexi Li - 我认为 dynamicIpSecurity 集合是少数必须通过 applicationHost 修改的奇怪案例之一。
-
没有“奇数”。部分有不同的覆盖模式,默认情况下像
dynamicSecurity这样的模式只会在applicationHost.config中被覆盖,并且通常通过位置标签。如果您在 IIS 配置系统上腾出更多时间,那么这将是显而易见的。 -
确实如此。感谢 cmets 他们带领我走上了正确的调查道路。我对 IIS 管理非常陌生,还有很多东西要学习。再次感谢您让我朝着正确的方向思考。
标签: powershell iis