web-dev-qa-db-ja.com

PowerShellでWebファームを作成する

PowerShellでサーバーファームの作成を自動化しようとしています。手動で作成すると、次のXMLが得られます。

<webFarms>
    <webFarm name="alwaysup" enabled="true">
        <server address="alwaysup-blue" enabled="true">
            <applicationRequestRouting httpPort="8001" />
        </server>
        <server address="alwaysup-green" enabled="true">
            <applicationRequestRouting httpPort="8002" />
        </server>
        <applicationRequestRouting>
            <healthCheck url="http://alwaysup/up.html" interval="00:00:05" responseMatch="up" />
        </applicationRequestRouting>
    </webFarm>
    <applicationRequestRouting>
        <hostAffinityProviderList>
            <add name="Microsoft.Web.Arr.HostNameRoundRobin" />
        </hostAffinityProviderList>
    </applicationRequestRouting>
</webFarms>

ただし、PSを介してこれを実行しようとすると、面倒です。私が知る限り、これを実行するための専用APIはありません( WebFarmSnapin は古いバージョンを対象としています)。

私は注意を IIS Administration Cmdlets に移しましたが、半分しか機能していません。

私が持っているコード:

#####
# Overwriting the server farm
#####

Write-Host "Overwriting the server farm $($webFarmName)"

$webFarm = @{};
$webFarm["name"] = 'siteFarm'

Set-WebConfiguration "/webFarms" -Value $webFarm

#####
# Adding the servers
#####

Write-Host "Adding the servers"

$blueServer = @{}
$blueServer["address"] = 'site-blue'
$blueServer["applicationRequestRouting"] = @{}

$greenServer = @{}
$greenServer["address"] = 'site-green'
$greenServer["applicationRequestRouting"] = @{}

$servers = @($blueServer, $greenServer)

Add-WebConfiguration -Filter "/webFarms/webFarm[@name='siteFarm']" -Value $servers

#####
# Adding routing
#####

Write-Host "Adding the routing configurations"

$blueServerRouting = @{}
$blueServerRouting["httpPort"] = "8001"
Add-WebConfiguration -Filter "/webFarms/webFarm[@name='siteFarm']/server[@address='site-blue']" -Value $blueServerRouting

これにより、

<webFarms>
    <webFarm name="siteFarm">
        <server address="site-blue" />
        <server address="site-green" />
    </webFarm>
    <applicationRequestRouting>
        <hostAffinityProviderList>
            <add name="Microsoft.Web.Arr.HostNameRoundRobin" />
        </hostAffinityProviderList>
    </applicationRequestRouting>
</webFarms>

ご覧のとおり、ルーティングに関連するポートがありません。そして、私はこの時点でヘルスチェックを追加しようとすることさえ始めていません。

私は何が間違っているのですか?これを簡単にする、私が見つけていないコマンドレットはありますか?

関連 ただし、有用な回答はあまりありません(生成されたコードを含むPowerShellタブは空のままです)。

SFが存在し、より適切である可能性があることを認識した後、ここで [〜#〜] so [〜#〜] からクロスポストしました。

4
Jeroen Vannevel

これを達成するために私が見た最良の方法は、powershellをappcmd.exeコマンドと混合することです。マイクロソフトは、Dockerコンテナーにファームをセットアップするためのサンプルコード here をリリースしました。

次に例を示します。

ForEach($farm in $farms)
{   
    # Create the farm
    .\appcmd.exe set config  -section:webFarms /+"[name='$($farm.name)']" /commit:apphost

    ForEach($server in $farm.Servers)
    {
        # Add server to farm
        .\appcmd.exe set config  -section:webFarms /+"[name='$($farm.name)'].[address='$($server.address)']" /commit:apphost
    }

    # URL Rewrite
    .\appcmd.exe set config  -section:system.webServer/rewrite/globalRules /+"[name='ARR_$($farm.name)_lb', patternSyntax='Wildcard',stopProcessing='True']" /commit:apphost
    .\appcmd.exe set config  -section:system.webServer/rewrite/globalRules /"[name='ARR_$($farm.name)_lb',patternSyntax='Wildcard',stopProcessing='True']".match.url:"*"  /commit:apphost
    .\appcmd.exe set config  -section:system.webServer/rewrite/globalRules /"[name='ARR_$($farm.name)_lb',patternSyntax='Wildcard',stopProcessing='True']".action.type:"Rewrite"  /"[name='ARR_$($farm.name)_lb',patternSyntax='Wildcard',stopProcessing='True']".action.url:"http://$($farm.name)/{R:0}"  /commit:apphost
}
2