分享

用Powershell 建立IIS web site

 阳光灿烂的笑笑 2014-09-16


受到continuous delivery 觀念的灌輸,新的專案都盡量朝向能自動化的建置及部署

因為目前使用TFS 2010 ,專案都是web system,這部分倒是網路上有不少文章可以參考,還算容易建立

 

只是完成專案的部分之後,接下來就會去想如何讓系統的環境也能自動化的建立,首先想解決的就是IIS的設定

一般來說,我想應該跟大家的作法差不多,就是會有一份文件,描述當要新建系統時,要如何設定IIS。當要轉換環境或是要建立一個新的測試環境時,就照著這份文件完成

當然會遇到的問題也應該多數人差不多

1. 文件未更新,實際環境與文件記錄不相同

2.人為設定可能出錯或遺漏,出問題時又要逐步檢查

 

因此 讓設定IIS的動作自動化,將這自動建置script本身就視為是一份文件

 

在說明之前,我的環境是windows server 2008 R2,打算在預設web site (default web site) 下建立一個應用程式,程式碼存放路徑d:\Webapp\MyWeb

 

1. 建立存放code的 folder

01#將code存放在d:\WebApp\MyWebSite,並判斷folder是否存在
02#設定給network service 權限
03 
04$folderPath = "d:\WebApp\MyWeb"
05$existPath = Test-Path $folderPath
06 
07if($existPath -eq $false) {
08    New-Item $folderPath -ItemType Directory
09 
10    $acl = Get-Acl $folderPath
11    $ar = New-Object System.Security.AccessControl.FileSystemAccessRule("network service""FullControl","ContainerInherit, ObjectInherit""None",  "Allow")
12    $acl.SetAccessRule($ar)
13    Set-Acl $acl -path $folderpath 
14}

 

2. 建立Application Pool

01$appPoolName = "My AppPool"
02$app = "iis:\AppPools\" + $appPoolName
03$existAppPool = Test-Path $app
04 
05if($existAppPool -eq $false) {
06    $appPool = New-Item $appPoolName
07 
08    #Identity --> Network service
09    $appPool.ProcessModel.IdentityType = 2
10 
11    #.net 4
12    $appPool.managedRuntimeVersion = "v4.0"
13 
14    #PopelineMode
15    $appPool.ManagedPipelineMode = 0
16 
17    #start mode
18    $appPool.startMode="AlwaysRunning"
19 
20 
21    #save property
22    $appPool | Set-Item
23}

這邊要說明一下,這裡用到WebAdministration 模組,因此上述的script執行前,要先import-module WebAdministration

可以參考一下保哥的文章 如何才能在 IIS 7.5 使用 Windows PowerShell Snap-In 功能

 

$appPool.ProcessModel.IdentityType = 2 指的是Identity用network service,其他意義如下

0 >  Local Service

1 >  Local System

2 > Network Service

3 > User

4 > ApplicationPoolIdentity

 

$appPool.managedRuntimeVersion = "v4.0" 指用.net framework 4.0

$appPool.ManagedPipelineMode = 0 指是用 Integrated pipeline mode,1則是class pipeline mode

有些設定的調整,因為沒用到就沒列出來

 

 

3. 建立application

01$appSitePath = "iis:\sites\Default Web Site\MyWebSite"
02$existWeb = Test-Path $appSitePath
03 
04if($existWeb -eq $false) {
05    $folderPath = $folderPath = "d:\WebApp\MyWeb"
06    $appPoolName = "My AppPool"
07 
08    New-Item $appSitePath -physicalpath $folderPath -type Application
09 
10    #設定剛剛建立的application pool
11    Set-ItemProperty $appSitePath -name applicationpool -value $appPoolName
12     
13    $appSiteShortName = $appSitePath.ToLower().Replace("iis:\sites\", "").Replace("\", "/")
14 
15    #開啟window authentication
16    Set-WebConfigurationProperty -filter /system.webServer/security/authentication/windowsAuthentication -name enabled -value true -PSPath IIS:\ -location $appSiteShortName
17 
18    #關閉anonymous authentication
19    Set-WebConfigurationProperty -filter /system.webServer/security/authentication/anonymousAuthentication -name enabled -value false -PSPath IIS:\ -location $appSiteShortName
20 
21    #移除預設的首頁並重新設定
22    Remove-WebConfigurationproperty -filter /system.webserver/defaultdocument -name files -PSPath IIS:\ -location $appSiteShortName
23    Add-WebConfiguration -filter /system.webserver/defaultdocument/files -atIndex 0 -value @{value = "default.aspx"} -PSPath IIS:\ -location $appSiteShortName
24}

同樣的語法套用,也可以建立web site

 

將上述分開的script 整理重構成一份powershell檔案即可成為一份自動化建置IIS  web site 的文件

當然日後的變更維護還是要仰賴團隊的紀律,一律以script 建置或修改IIS 設定,如此才能確保實際環境與script的一致性

 

(之前還想說script run 完之後,看能不能抓下設定完成後的畫面圖片,產生一份輔助的文件,不過 算了……想想就好……)



    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多