Найдите файл Powershell ApplicationHost.config и замените значение - PullRequest
0 голосов
/ 24 мая 2019

У меня есть необходимость изменить файл applicationHost.config, расположенный по умолчанию в каталоге c: \ windows \ System32 \ inetsrv \ config.

При просмотре файла XML существует много записей для расположения в конфигурации.Мне нужно изменить только конкретный.Возможно, проверять, существует ли он первым, прежде чем его изменять?

Следующий XML - это то, что я хочу изменить.Он вложен в конфигурацию верхнего уровня.Я хочу изменить только одну запись: anonymousAuthentication enabled = "true", если установлено, что оно ложно.

<location path="Default Web Site/MyWebsite/SiteA">
    <system.webServer>
        <security>
            <authentication>
                <digestAuthentication enabled="false" />
                <basicAuthentication enabled="false" />
                <anonymousAuthentication enabled="false" />
                <windowsAuthentication enabled="true">
                    <providers>
                        <clear />
                        <add value="Negotiate" />
                        <add value="NTLM" />
                    </providers>
                </windowsAuthentication>
            </authentication>
        </security>
    </system.webServer>
</location>

Примечание.Я вижу, что я мог бы использовать set-webconfigurationproperty.Однако, когда я делаю это, он говорит мне, что раздел конфигурации не может быть использован по этому пути.Это происходит, когда раздел заблокирован на родительском уровне.Я использую PSPath, который должен обойти это, но он не работает.

1 Ответ

0 голосов
/ 24 мая 2019

Нечто подобное должно сработать.Я рекомендую вам создать резервную копию вашего Applicationhost, чтобы вы могли вернуться в случае необходимости.

Вам нужно будет запустить этот скрипт от имени администратора.

Хитрость заключается в том, чтобы использовать SelectNodes или SelectSingleNode и ориентироваться на конкретные интересующие вас узлы. Я использовал предоставленный вами кодчтобы указать, что я искал интересующий вас узел, но только в том случае, когда путь к местоположению соответствует «Веб-сайт по умолчанию / MyWebsite / SiteA»

$InetConfigPath = 'c:\windows\System32\inetsrv\config\applicationHost.config'
$xml = [xml](get-content -Path $InetConfigPath -Raw)


$Nodes = $xml.SelectNodes('//location[@path="Default Web Site/MyWebsite/SiteA"]/system.webServer/security/authentication/anonymousAuthentication')
foreach ($Node in $nodes) {
    if ($Node.enabled -eq $false) {
        $Node.enabled = 'true'
    }
}


$xml.Save($InetConfigPath)
  • Модуль WebAdministration рекомендуется вместо изменения ApplicationHost.Файл конфигурации напрямую, чтобы избежать непредвиденных последствий.

Ссылки

Выбор узлов с помощью XPath Navigation

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