如何用PowerShell及IISAdministration模块创建applicationHost.config缺失的location元素
在IISAdministration中为站点添加节点及dynamicIpSecurity配置
Hey James, 我明白你的需求了——你需要检查applicationHost.config里对应站点的<location>元素是否存在,如果不存在,就添加包含dynamicIpSecurity的自定义配置。其实IIS的逻辑是:只有当站点有非继承的自定义配置时,才会自动生成对应的<location>节点,所以我们不需要手动创建<location>标签,只需要通过IISAdministration模块为站点创建专属的dynamicIpSecurity配置即可,IIS会自动帮我们生成对应的XML结构。
下面是完整的实现代码,我会一步步解释:
# 导入IISAdministration模块 Import-Module IISAdministration # 获取IIS服务器管理器实例 $Manager = Get-IISServerManager # 定义目标站点名称 $siteName = "my.sitedomain.foo" # 获取applicationHost.config的配置对象 $appHostConfig = $Manager.GetApplicationHostConfiguration() # 尝试获取该站点的dynamicIpSecurity配置节 $dipSecuritySection = $appHostConfig.GetSection("system.webServer/security/dynamicIpSecurity", $siteName) if (-not $dipSecuritySection) { # 如果配置节不存在,创建该站点专属的dynamicIpSecurity配置节 $dipSecuritySection = $appHostConfig.CreateSection("system.webServer/security/dynamicIpSecurity", $siteName) # 创建并配置denyByConcurrentRequests子元素 $denyByConcurrent = $dipSecuritySection.CreateChildElement("denyByConcurrentRequests") $denyByConcurrent.SetAttributeValue("enabled", $true) # 创建并配置denyByRequestRate子元素 $denyByRequestRate = $dipSecuritySection.CreateChildElement("denyByRequestRate") $denyByRequestRate.SetAttributeValue("enabled", $true) # 如果你需要设置其他属性,比如maxRequests和requestIntervalInMilliseconds,可以在这里添加 # $denyByRequestRate.SetAttributeValue("maxRequests", 20) # $denyByRequestRate.SetAttributeValue("requestIntervalInMilliseconds", 200) # 将创建的配置节添加到applicationHost配置中 $appHostConfig.RootSectionGroup.Sections.Add($dipSecuritySection) } else { # 如果配置节已经存在,你可以在这里更新现有配置(比如修改属性) $denyByRequestRate = $dipSecuritySection.GetChildElement("denyByRequestRate") if ($denyByRequestRate) { $denyByRequestRate.SetAttributeValue("enabled", $true) # 按需更新其他属性 } } # 保存所有配置更改,这一步很重要,否则修改不会写入applicationHost.config $Manager.CommitChanges()
关键知识点说明:
CreateSection方法:当你指定站点名称作为第二个参数时,IISAdministration会自动为该站点创建专属的配置节,对应的<location path="my.sitedomain.foo">节点会被自动生成在applicationHost.config中。CommitChanges():所有通过Get-IISServerManager做出的修改,必须调用这个方法才能持久化到配置文件中,否则只是内存中的临时修改。- 子元素的创建:通过
CreateChildElement方法可以添加<denyByConcurrentRequests>和<denyByRequestRate>这类子节点,并通过SetAttributeValue设置属性值。
执行这段代码后,你打开applicationHost.config就能看到自动生成的<location>节点,和你需要的XML结构完全一致。如果后续需要修改配置,也可以通过同样的方式操作已有的配置节。
内容的提问来源于stack exchange,提问作者iomdesign
相关产品推荐
相关产品推荐

