我正在处理我们的applicationHost.config文件中的大量重定向,基本上我想读取重定向规则并提取规则的 XML 信息,以便获取重定向 URL 以供审查。由于我们的 IIS 7.5 实例中有大量重定向规则,因此请使用 IIS 的 URLRewrite 功能。
我想导出我们现有规则的列表,并且由于 applicationHost.config 是使用 PowerShell 2.0 的 XML(我现在还不能使用 3.0),所以我应该能够遍历节点并拉取它们出去。很简单,直到我尝试在 sectionGroup system.webServer 下获取任何内容,当我尝试拉出该节点时,我无法获得任何值。
查看配置文件时,基本规则是结构化的(根据上面指向 Microsoft 的链接):
<rule name="Administration Redirection" enabled="true" stopProcessing="true">
<match url="^administration[/]?.*" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
<action type="Redirect" url="http://www.mysite.fake/{R:0}" />
</rule>
基本上我打算做以下事情:
[xml]$redirectXML = Get-Content $redirectFile
$redirectXML | % {$_.configuration.system.webServer.rewrite.rewriteMaps}
我想在哪里获取 rewriteMap 键和值,所以我有这些重定向,并且可以从如下规则中提取键和重定向的 URL:
$redirectXML | % {$_.configuration.system.webServer.rewrite.globalRules.rule}
在这里,我想链接中的值,这将使我获得大部分重定向 URL。
看起来 system.webServer 以某种方式弄乱了节点,因为它具有 . 在名字里。一个似乎可用的选项是使用 configuration.configSections,因为它显示了 sectionGroups,其中之一是 system.webServer,但我还没有弄清楚如何以正确的格式获取节点以提取我想要的部分。
有没有办法做到这一点,或者比尝试使用 Get-Content 更好的方法?我之前已经在其中完成了其他 XML 文件,虽然我看到了 applicationHost.config 的其他一些 PowerShell 脚本,大多数都是用于添加的,但我想做的只是提取几个节点。
感谢您的任何帮助或指点。
编辑:所以当我仍然环顾四周时,我发现我可以通过在它周围使用“标记来通过 system.webServer。像这样:
$redirectXMl.configuration."system.webServer".rewrite.rewriteMaps.rewriteMap.add
这让我得到了一个很好的键值对表中的重写映射。现在我仍然需要获取 GlobalRules。我可以通过以下方式获得每条规则:
$redirectXMl.configuration."system.webServer".rewrite.globalRules.rule
显示:
name : Campaign Redirect
enabled : true
stopProcessing : true
match : match
conditions : conditions
action : action
但是我需要提取匹配和操作的值,但还没有。