【问题标题】:How to create location/ when it doesn't exist in applicationHost.config with Powershell and IISAdministration module如何使用 Powershell 和 IISAdministration 模块在 applicationHost.config 中不存在位置/时创建位置/
【发布时间】: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


【解决方案1】:

我的问题措辞不佳。真的,我应该问“如何使用 IISAdministration powershell 模块为特定站点配置 dynamicIpSecurity?”。

由于我对 IISAdministration 和 Microsoft.Web.Administration 的了解有限,我的注意力集中在了错误的障碍上。正确问题的解决方案来自重新阅读https://docs.microsoft.com/en-us/iis/manage/scripting/how-to-use-microsoftwebadministration#set-configuration-in-site-root-webconfig(感谢 Lex Li 改变了我的想法)。

通过使用ServiceManager.GetWebConfiguration("name.ofyour.site") 而不是ServiceManager.GetApplicationHostConfiguration(),您可以获得指定网站的配置对象,其中包括所有配置元素,而不管该配置实际写入的文件是什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-03
    • 2015-02-09
    • 2012-08-19
    • 2017-05-18
    • 1970-01-01
    • 2023-03-30
    • 2020-12-12
    相关资源
    最近更新 更多