我们在每台服务器上都有多个IIS网站,我们有PowerShell脚本可以创建/更新单个网站,同时配置绑定,SSL,应用程序池等。
鉴于服务器场的大小和网站数量,非常希望能够同时升级多个网站。
但是,这引发了以下问题:站点A的applicationHost.config更新可能会被站点B的并发更新覆盖。
这可能吗?
答案 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进程崩溃了:
至少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)上运行测试