Как создать местоположение / когда его нет в applicationHost.config с модулем Powershell и IISAdministration - PullRequest
0 голосов
/ 21 мая 2018

Есть идеи, как добавить новый элемент в корень applicationHost.config с помощью модуля IISAdministration?

Я бы собрал воедино текущий код (отредактированный для краткости), чтобы загрузить новый сайт в 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)
    }            
}

Когда элемент dynamicIpSecurity был изменен с помощью диспетчера IIS, xml добавляется в файл конфигурации.Однако в готовом виде мой IIS applicationHost.config не имеет дочернего элемента <location> для сайта.

Цель состоит в том, чтобы проверить, существует ли элемент location, и если нет, добавить что-нибудькак следующий

<location path="my.sitedomain.foo">
    <system.webServer>
        <security>
            <dynamicIpSecurity>
                <denyByConcurrentRequests enabled="true" />
                <denyByRequestRate enabled="true" />
            </dynamicIpSecurity>
        </security>
    </system.webServer>
</location>

Большое спасибо, Джеймс

1 Ответ

0 голосов
/ 23 мая 2018

Мой вопрос был сформулирован плохо.В самом деле, я должен был спросить «Как мне настроить dynamicIpSecurity для конкретного сайта с помощью модуля powershell IISAdministration?».

Из-за моих ограниченных знаний IISAdministration и Microsoft.Web.Administration мое внимание было сосредоточено на неправильном препятствии.Решение правильного вопроса было перечитано https://docs.microsoft.com/en-us/iis/manage/scripting/how-to-use-microsoftwebadministration#set-configuration-in-site-root-webconfig (спасибо Лексу Ли за то, что он изменил мое мышление).

Используя ServiceManager.GetWebConfiguration("name.ofyour.site") вместо ServiceManager.GetApplicationHostConfiguration(), вы получаете объект конфигурации для указанного веб-сайта, который включает все элементы конфигурации независимо от файла, в который эта конфигурация фактически записана.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...