Пытаясь избавиться от кликабельности при настройке IIS для нашего приложения, я посмотрел на appcmd. В частности, это возможность экспортировать деревья конфигураций и повторно применять их с минимальными усилиями.
Как правило, это дает экспортированную конфигурацию:
appcmd list Config /section:httpProtocol /config /xml > template.xml
который я могу затем повторно импортировать позже с помощью:
appcmd set Config /in < template.xml
и изменения вступают в силу. Это хорошо работает для всего, кроме настраиваемых страниц ошибок.
Я экспортировал их с помощью:
appcmd list Config "Default Web Site/intranet" /section:httpErrors /config /xml > customerrors.xml
но когда я пытаюсь импортировать с помощью:
appcmd set Config /in < customerrors.xml
Я получаю следующую ошибку:
ERROR ( hresult:8007000d, message:The input contained an error element, which may
indicate that the operation producing the input has failed. )
Ну да, это потому, что я импортирую записи обработчика ошибок, которые выглядят так:
<?xml version="1.0" encoding="UTF-8"?>
<appcmd>
<CONFIG CONFIG.SECTION="system.webServer/httpErrors" path="MACHINE/WEBROOT/APPHOST/Default Web Site/intranet" overrideMode="Inherit"
locked="false">
<system.webServer-httpErrors errorMode="Custom">
<error statusCode="500" prefixLanguageFilePath="" path="/intranet/ErrorPages/500-100.asp" responseMode="ExecuteURL" />
<error statusCode="500" subStatusCode="100" path="/intranet/ErrorPages/500-100.asp" responseMode="ExecuteURL" />
</system.webServer-httpErrors>
</CONFIG>
</appcmd>
...который является то, что appcmd
дал мне (что означало бы, что элемент «ошибка» действительно является тем, что требуется). Это случай, когда appcmd пытается быть слишком умным, или я упускаю что-то смехотворно очевидное?
Ура!
Веселая. Таким образом, импорт appcmd, кажется, рассматривает слово «ошибка» как настоящую ошибку, не учитывая эту законную ситуацию. Я посмотрю, смогу ли я узнать для вас больше информации об этом.
Что касается решения, то с appcmd лучший способ узнать синтаксис - использовать редактор конфигурации. Внесите нужные изменения, затем перейдите в раздел «Сгенерировать сценарий» справа и щелкните вкладку AppCmd. Это отличный способ получить нужный синтаксис.
Вот пример того, как сделать httpErrors:
appcmd.exe set config "Default Web Site" -section:system.webServer/httpErrors /+"[statusCode='503',path='503.htm']"