0

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 がノードを台無しにしているように見えました。名前に。利用可能なように見えるオプションは、sectionGroups を示しているため、configuration.configSections を使用することでした。そのうちの 1 つは 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

しかし、まだマッチとアクションの値を引き出す必要があります。

4

1 に答える 1

1

XMl でいくつかの作業を行い、正しい方向を示す他の回答を見つけた後、次のスクリプトになりました。おそらくよりクリーンになる可能性がありますが、基本的には、書き換え/リダイレクトを処理するapplicationHost.configの部分を引き出して、サイトで処理する100程度を管理できるようにしようとしていました. それらを別のドキュメントで追跡するのは難しいので、いつでも必要なものを引き出す機能が必要でした.

これは、スクリプト作成に使用する PowerShell v2.0 にあります。コメントは主に、私が何をしているのかを理解するために含まれています。

# Get the path and name of the redirect file, the
# ApplicationHost.Config file
Param([string]$redirectFile)

# Constants that will be necessary
[string]$redirListDir = $null
# Using a CSV to make it simpler to reorder
[string]$redirectList = "redirectList.csv"

# Check that we have a file to pull redirects from
if ( ($redirectFile -eq $null) -or ($redirectFile -eq "")) {
  "Hey, you need to give a file to check.  Make sure its the path including the name "
  "of the applicationHost.config that needs to be checked.  Try something like "
  ".\redirectReview.ps1 C:\FileLocation\applicationHost.config"
  "Thank you!"
  exit
}

# Check that we have a place to put the file at the end
    if(($redirListDir -eq $null) -or ($redirListDir -eq "")) {
        if (Test-Path -Path "d:\temp") {
            $redirListDir = "d:\temp"
      "Using D:\Temp"
        } elseif (Test-Path -Path "c:\temp") {
            $redirListDir = "c:\temp"
      "Using C:\Temp"
        } else {
            "Cannot find a Temp directory as D:\temp or C:\temp.  Create one and try again.`n"
            exit
        }
  }

# Clean up any existing file so we can create a new one
$redirectListFile = Join-Path -Path $redirListDir  -ChildPath($redirectList)
if (Test-Path $redirectListFile) {
  Remove-Item $redirectListFile -Force
}

# Open the file and put it in an XML format
[xml]$redirectXML = Get-Content $redirectFile

# Review the XML tags

# This gets all the rewrite Map redirects
$rules = $redirectXMl.configuration."system.webServer".rewrite.rewriteMaps.rewriteMap.add 

"Now for the Global Rules"
# This gets all the rules that have been added
$redirectUrl = $redirectXMl.configuration."system.webServer".rewrite.globalRules.rule

"Creating the output file"
# Output the claimed values into a CSV file that can be reviewed somewhere
$rules | % {
  $a = $_.key + "`t" + $_.value
  $a >> $redirectListFile
}
$redirectUrl | % {
  $b1 = ($_.match).OuterXML
  $b2 = ($_.action).OuterXML
  # Probably a better way to handle this but I need to match up the two properties
  $b = $b1 + "`t" + $b2
  $b >> $redirectListFile
}
# We should be done here
于 2013-07-29T11:02:10.637 に答える