You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:31:28