使用指令工具 Appcmd 管理與設定 IIS 7

在使用 IIS 6 時,TigerLin 是用 Adsutil.vbs 來管理整個 IIS 的運作,讓一些瑣碎的工作都可快速的進行。過年期間在研究 IIS 7 的時候發現 Adsutil.vbs 已經無法使用了,到 Technet 上看了一下,看到了最新的指令管理工具是 Appcmd,過年閒的發慌剛好可以來研究一下~ 這篇文章也算是 TigerLin 當作日後方便查閱的筆記~^^

在使用 IIS 6 時,TigerLin 是用 Adsutil.vbs 來管理整個 IIS 的運作,讓一些瑣碎的工作都可快速的進行。過年期間在研究 IIS 7 的時候發現 Adsutil.vbs 已經無法使用了,到 Technet 上看了一下,看到了最新的指令管理工具是 Appcmd,過年閒的發慌剛好可以來研究一下~ 這篇文章也算是 TigerLin 當作日後方便查閱的筆記~^^

Appcmd 可以管理的物件如下:

  • SITE 管理虛擬站台
  • APP 管理應用程式
  • VDIR 管理虛擬目錄
  • APPPOOL 管理應用程式集區
  • CONFIG 管理一般設定區段
  • WP 管理工作者處理序
  • REQUEST 管理 HTTP 要求
  • MODULE 管理伺服器模組
  • BACKUP 管理伺服器設定備份
  • TRACE 使用失敗要求的追蹤記錄

在使用過程中,只要使用 "/?" 參數都有詳細的說明,例如執行 appcmd site /? 就會列出很詳細的說明了

使用案例:新增站台
appcmd add site /name:"My Test site" /id:9 /bindings:http/*:8080: /physicalPath:"d:\@@@@@"

/name - 新增站台的識別名稱
/id - 指定站台的識別元 (如省略將會自動給予一個)
/bindings - 指定係結的資訊
/PhysicalPath - 站台的實體路徑

 

使用案例:對指定站台設定主機標頭
appcmd set site /site.name:"My Test Site" /bindings:"http://test.ptitas.net:8080"

 

使用案例:更改站台的識別元
appcmd set site /site.name:"My Test Site" /id:999

這裡要注意,變更識別元之後的站台預設會變成 "stop",要追加以下指令啟動站台
appcmd start site "My Test Web"

這樣看來,Appcmd 的簡單易用還真是不賴,在進行大型佈署時可以用指令批次的方式省下不少的麻煩
這裡 TigerLin 也測試了變更 LOG 格式的方法,語法比 adsutil.vbs 簡單,但測試的過程要把 LOG 的各項屬性找出來費了一點功夫呢~

 

使用案例:變更指令站台的 W3C Log 格式
首先,將其中一個站台的 LOG 紀錄全部勾選,先以指令找出 Log 相關的區域設定
appcmd list config | findstr log > d:\LogExt.txt

接下來新增一個站台,針對特殊的分析程式 (EX:AWStats) 設定 LOG,再度執行一次剛剛的指令,就會發現有兩個區段,一個很長的就是全選的,另外一個就是依照需求自己設定的。很長的區段 (也就是全部勾選的LOG 欄位)  可看到下列的內容:

<logFile logExtFileFlags="Date, Time, ClientIP, UserName, SiteName, ComputerName, ServerIP, Method, UriStem, UriQuery, HttpStatus, Win32Status, BytesSent, BytesRecv, TimeTaken, ServerPort, UserAgent, Cookie, Referer, ProtocolVersion, Host, HttpSubStatus” />

經過比對與撰寫後,就可以對站台設定想要的 LOG 格式了 --
appcmd set config /section:sites /[id='9'].logFile.logExtFileFlags:Date,Time,ClientIP,UserName,Method,UriStem,
UriQuery,HttpStatus,BytesSent,UserAgent,Referer,ProtocolVersion

也可將此命令撰寫成一個 Script,以利後續使用~

 

後記:為什麼要使用命令模式管理
哈~這個是 TigerLin 最常被問到的問題,有介面可用幹嘛還要去搞指令?
舉個例子:某些設定並不是介面可以達成的,就以 SQL SERVER 來說,AWE 模式都要先執行某個預存程序才能啟動。

而從另外一個角度來看則是 "自動化",使用指令就可以編入排程定期執行。
我們可以用指令的方式自動備份 IIS 的組態檔,不用人工進行備份了 (雖然 IIS7 會定時備份,但 TigerLin 習慣每天備份比較不會出差錯)
基於以上的理由,TigerLin 越來越偏好使用指令的方式來設定了,多了解一些指令在未來的應用上會更廣闊的 ^^b

 

參考連結
使用 Adsutil.vbs 管理指令碼 http://technet.microsoft.com/zh-tw/library/cc781546.aspx
IIS 7.0:Appcmd.exe http://technet.microsoft.com/zh-tw/library/cc772200.aspx

如果覺得這篇文章對你有所幫助,可以透過 Paypal 支持作者唷~