2

各サーバーの IIS に複数の Web サイトがあり、バインディング、SSL、アプリ プールなどの構成と共に、個々の Web サイトを作成/更新できる PowerShell スクリプトがあります。

サーバー ファームの規模と Web サイトの数を考えると、複数の Web サイトを同時にアップグレードできることが非常に望ましいです。

ただし、これにより、サイト A の applicationHost.config への更新が、サイト B の同時更新によって上書きされる可能性があるという問題が発生します。

これは可能ですか?

4

1 に答える 1

4

これをテストするのが常に最善です:

いくつかのサイト (この場合は 20) を作成する単純なスクリプトから始めましょう。

Param
(
    [Parameter(Mandatory=$true)]
    [int]
    $offset
)

Import-Module WebAdministration

ForEach ($number in 1..20 ) {

    $id = $offset + $number
    New-WebSite -Name $("Test_" + $id) -Port $id -Id $id -PhysicalPath "$env:systemdrive\inetpub\wwwroot" 
}

これをに保存しますC:\temp\New-TestSite.ps1

そのスクリプトを同時に 3 回実行しC:\temp\Run-Test.ps1て、次の内容の別のスクリプトを作成しました。

start-job -ScriptBlock {& C:\temp\New-TestSite.ps1 -offset 10000}
start-job -ScriptBlock {& C:\temp\New-TestSite.ps1 -offset 20000}
start-job -ScriptBlock {& C:\temp\New-TestSite.ps1 -offset 30000}

を実行Run-Test.ps1したら、作成したサイトの数を確認します。

ls iis:\sites | group {$_.Name.substring(0,6)} | Select Count,Name | Format-Table -AutoSize

私が得た:

Count Name
----- ----
   19 Test_1
   18 Test_2
   15 Test_3

60 個中 52 個を作成しました

スクリプトごとに 50 個を作成すると、次のようになりました。

Count Name
----- ----
   31 Test_1
   31 Test_2
   30 Test_3

それは150のうち92です

さらに悪いことに、一部のテスト ケースでは、PowerShell プロセスの 1 つがクラッシュしました。

ここに画像の説明を入力

少なくともGet-Job示しています:

Id     Name            PSJobTypeName   State    
36     Job36           BackgroundJob   Failed   
38     Job38           BackgroundJob   Completed
40     Job40           BackgroundJob   Completed

したがって、結論として、applicationHost.config を同時に変更することは保存されていないと言えます。

もちろん、これは極端なテスト ケースであり、手動で変更を同時に行ってもうまくいく可能性がありますが、注意が必要です。

サーバー 2012 R2 (IIS 8.5) で実行されたテスト

于 2015-07-06T06:00:13.480 に答える