2009-06-08 81 views
12

編輯:IIS6;我不確定在不久的將來IIS7是一種選擇...用於配置IIS6的開發工具

從開發人員角度來看,我經常更改我的IIS設置,或者需要將其他團隊的設置合併到不同的VM中。 「保存配置到磁盤」從來沒有真正適用於我。

因爲我們做了很多小的修改,網絡安裝項目從未真正起作用......針對網絡管理員的工具不一定非常適合開發者 - 我們有不同的目標和需求。

有沒有人有腳本/工具/實用程序,可以讓我們快速配置IIS?特別是:

  • 除去一切(開始清潔)
  • 添加虛擬目錄的負荷,每個映射到應用基路徑
  • 組作爲應用
  • 設置應用池(我們「會假定應用程序池已存在)
  • 設置ASP.NET版本2.X如果需要

˚F從一些平面輸入列表的查找(任何格式都可以)。

回答

11

我能想到的三個選項中把我的頭頂部...

  1. PowerShell的管理單元。
  2. AdsUtil.vbs(默認情況下位於C:\ Inetpub \ AdminScripts)將使您能夠將這些任務編寫爲批處理文件,或者如果您沒有時間投入學習,甚至可以從PowerShell中調用它IIS的WMI界面。
  3. MSBuild腳本。可能難以配置,但MSBuild Extension Pack提供了一些用於從MSBuild腳本管理IIS6和IIS7的任務。

我想,如果是我需要做到這一點,我會用PowerShell或刪除需要一起並創建一個基準VM安裝了所有的基本知識已經配置的。當我與teasting完成我只是回滾硬盤,然後可以自由重走。

1

Powershell會工作。如果你想避免依賴,你也可以生成一個腳本來針對AdsUtil.vbs運行。

可能會更容易在IIS7上進行標準化,所有這些東西都存放在web.config文件中,使生活變得更加簡單。

1

您可能希望查看IIS的元數據庫XML配置文件並允許直接編輯。

4

我有點晚了,但我認爲這個PowerShell腳本是有用的,請注意,我只將它用於我的本地開發盒,因此對神奇數字表示歉意。

AuthFlags = 4集成授權

這並不完全符合Marc的要求,但它是一個良好的開端。

如果您下載WMI Tools,則可以使用它們探索到IIS元數據庫的WMI接口。

function CreateAppPool($poolName,$userName,$password) 
{ 
    [wmiclass] $appPoolSettings = "root\MicrosoftIISv2:IISApplicationPoolSetting"; 
    $newPool = $appPoolSettings.CreateInstance(); 
    $newPool.Name = "W3SVC/AppPools/" + $poolName; 
    $newPool.WAMUsername = $userName; 
    $newPool.WAMUserPass = $password; 
    $newPool.AppPoolIdentityType = 3; 
    $newPool.Put(); 
    # Do it again if it fails as there is a bug with Powershell/WMI 
    if (!$?) 
    { 
     $newPool.Put(); 
    } 
} 


function CreateWebsite($webSiteName, $path, $port, $appPoolName) 
{ 
    [wmiclass] $bindingClass = 'root\MicrosoftIISv2:ServerBinding'; 
    $bindings = $bindingClass.CreateInstance(); 
    $bindings.Port = $port; 
    $webService = Get-WmiObject -namespace "root\MicrosoftIISv2" -class "IIsWebService"; 
    $webSite = $webService.CreateNewSite($webSiteName, $bindings, $path); 
    [int] $index = $webSite.ReturnValue.IndexOf("'") + 1; 
    [int] $length = $webSite.ReturnValue.Length - $index - 1; 
    [string] $websiteID = $webSite.ReturnValue.SubString($index, $length) + "/root"; 
    $webVirtualDirSetting = Get-WmiObject -namespace "root\MicrosoftIISv2" -class "IIsWebVirtualDirSetting" | Where-Object {$_.Name -eq $websiteID}; 
    $webVirtualDirSetting.AppFriendlyName = $webSiteName; 
    $webVirtualDirSetting.AppPoolId = $appPoolName; 
    $webVirtualDirSetting.AccessFlags = 517; 
    $webVirtualDirSetting.AuthFlags = 4; 
    $webVirtualDirSetting.Put(); 

    #Switch the Website to .NET 2.0 
    C:\windows\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -sn W3SVC/ 
} 

$webSiteName = "MyWebsiteName"; 
$webSitePath = "C:\MyWebsitePath"; 
$webSitePort = "9001"; 
$appPoolName = "MyWebsitePool"; 
$appPoolIdentity = "MYDESKTOP\MyWebsiteIdentity"; 
$appPoolPassword = "MyWebsitePassword"; 

CreateAppPool $appPoolName $appPoolIdentity $appPoolPassword 
CreateWebsite $webSiteName $webSitePath $webSitePort $appPoolName