如何在Add-WebConfigurationProperty中添加子配置集合
IIS重写规则单命令配置方案
配置IIS过程中,多次调用Add/Set-WebConfigurationProperty命令迭代完成重写规则配置操作繁琐,尝试直接在conditions哈希表中编写add节点的写法无法生效,逐行追加条件条目虽然可正常运行,但代码冗余度高。
失效原因
IIS的PowerShell配置命令解析嵌套哈希表时,不会自动将键名为add的单个哈希表识别为集合子项。<conditions>属于集合型配置节点,其下属的条件条目需要显式以数组格式传入,才能被命令正确识别写入。
正确实现代码
将conditions节点下add对应的值调整为数组格式,把所有条件条目作为数组元素传入,即可通过单条命令完成整条重写规则的创建,无需后续逐行追加:
Add-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -filter "system.webserver/rewrite/GlobalRules" -name "." -value @{ name="Protocol-Version Blocking Rule"; stopProcessing='True'; match=@{ url=".*" }; conditions=@{ logicalGrouping="MatchAll"; # add对应值为数组,每个元素对应一条条件规则 add=@( @{input="{SERVER_PROTOCOL}"; pattern="HTTP/0.8";}, @{input="{SERVER_PROTOCOL}"; pattern="HTTP/0.9";}, @{input="{SERVER_PROTOCOL}"; pattern="HTTP/1.0";} ) }; action=@{ type="CustomResponse"; statusCode=505; statusReason="HTTP Version Not Supported"; statusDescription="Wazaaa."; } }
使用说明
- 即使仅需要添加1条条件规则,也需要用
@()将条目包裹为数组格式,否则仍会出现写入失效问题 - 该写法同样适配IIS配置中其他集合类型节点,比如重写规则的
serverVariables、站点级别的customHeaders等,均可通过单条命令完成全量配置,无需多次调用命令追加子项
内容的提问来源于stack exchange,提问作者silmaril
相关产品推荐
相关产品推荐

