是否可以同时修改IIS配置

时间:2015-07-06 03:10:34

标签: powershell iis-7 concurrentmodification applicationhost

我们在每台服务器上都有多个IIS网站,我们有PowerShell脚本可以创建/更新单个网站,同时配置绑定,SSL,应用程序池等。

鉴于服务器场的大小和网站数量,非常希望能够同时升级多个网站。

但是,这引发了以下问题:站点A的applicationHost.config更新可能会被站点B的并发更新覆盖。

这可能吗?

1 个答案:

答案 0 :(得分:3)

总是最好测试一下:

让我们从创建一些网站的简单脚本开始,在这种情况下为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

现在同时运行该脚本三次,我创建了另一个脚本: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

所以我们创建了 52中的52

当为每个脚本创建50个时,我得到了:

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

92中的92

在某些测试用例中,其中一个PowerShell进程崩溃了:

enter image description here

至少Get-Job显示:

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

总而言之,我们可以说同时修改applicationHost.config并不是保存。

当然,这是一个极端的测试案例,同时进行手动更改可能会有效,但我们应该小心。

在Server 2012 R2(IIS 8.5)上运行测试