为了尝试消除为我们的应用程序配置 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 试图表现得太聪明的例子,还是我忽略了一些非常明显的东西?
干杯!
答案1
真有趣。因此,appcmd 导入似乎将单词“error”视为真正的错误,而不是考虑到这种合法的情况。我会看看能否为您找到有关此问题的更多信息。
至于目前的解决方案,使用 appcmd,找出语法的最佳方法是使用配置编辑器。进行所需的更改,然后转到右侧的“生成脚本”并单击 AppCmd 选项卡。这是获取所需语法的绝佳技巧。
下面是如何处理 httpErrors 的示例:
appcmd.exe set config "Default Web Site" -section:system.webServer/httpErrors /+"[statusCode='503',path='503.htm']"