The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

如何批次修改 Web Farm 中各主機的 IIS Log 的擴充紀錄選項

有時後我們會需要修改 IIS 中 W3C 擴充紀錄檔案格式 的紀錄內容,特別是「擴充紀錄選項」設定,因為 IIS 預設勾選的欄位很少,所以較無法分析出有用的資訊,所以通常每次安裝好 IIS 之後我都會修改這裡的欄位(如下圖示),最近為了替客戶修改「一群」主機,所以寫了個簡易的批次檔可透過 Adsutil.vbs 管理指令碼 修改特定網站的「擴充紀錄選項」的設定。

IIS 網站內容設定 - 網站 - 啟用紀錄 - 現用的紀錄格式 - W3C 擴充紀錄檔案格式

紀錄內容 - 進階 - 擴充紀錄選項 

指令碼如下(這是個批次檔,你可以複製起來儲存到 SetLogExtFile.bat 以方便使用):

@ECHO OFF

IF [%1] == [/?] GOTO _help
IF [%1] == [] GOTO _help
IF [%2] == [] GOTO _help

SET ServerName=%1
SET SiteID=%2

ECHO Configuring Server [%ServerName%] on SiteID [%SiteID%]'s LogExtFile Flags ...
ECHO.

SET AdsUtil=C:\Inetpub\AdminScripts\adsutil.vbs
cscript /nologo %AdsUtil% -s:%ServerName% SET W3SVC/%SiteID%/LogExtFileDate             True
cscript /nologo %AdsUtil% -s:%ServerName% SET W3SVC/%SiteID%/LogExtFileTime             True
cscript /nologo %AdsUtil% -s:%ServerName% SET W3SVC/%SiteID%/LogExtFileClientIp         True
cscript /nologo %AdsUtil% -s:%ServerName% SET W3SVC/%SiteID%/LogExtFileUserName         True
cscript /nologo %AdsUtil% -s:%ServerName% SET W3SVC/%SiteID%/LogExtFileSiteName         True
cscript /nologo %AdsUtil% -s:%ServerName% SET W3SVC/%SiteID%/LogExtFileComputerName     True
cscript /nologo %AdsUtil% -s:%ServerName% SET W3SVC/%SiteID%/LogExtFileServerIp         True
cscript /nologo %AdsUtil% -s:%ServerName% SET W3SVC/%SiteID%/LogExtFileMethod           True
cscript /nologo %AdsUtil% -s:%ServerName% SET W3SVC/%SiteID%/LogExtFileUriStem          True
cscript /nologo %AdsUtil% -s:%ServerName% SET W3SVC/%SiteID%/LogExtFileUriQuery         True
cscript /nologo %AdsUtil% -s:%ServerName% SET W3SVC/%SiteID%/LogExtFileHttpStatus       True
cscript /nologo %AdsUtil% -s:%ServerName% SET W3SVC/%SiteID%/LogExtFileWin32Status      True
cscript /nologo %AdsUtil% -s:%ServerName% SET W3SVC/%SiteID%/LogExtFileBytesSent        True
cscript /nologo %AdsUtil% -s:%ServerName% SET W3SVC/%SiteID%/LogExtFileBytesRecv        True
cscript /nologo %AdsUtil% -s:%ServerName% SET W3SVC/%SiteID%/LogExtFileTimeTaken        True
cscript /nologo %AdsUtil% -s:%ServerName% SET W3SVC/%SiteID%/LogExtFileServerPort       True
cscript /nologo %AdsUtil% -s:%ServerName% SET W3SVC/%SiteID%/LogExtFileUserAgent        True
cscript /nologo %AdsUtil% -s:%ServerName% SET W3SVC/%SiteID%/LogExtFileReferer          True
cscript /nologo %AdsUtil% -s:%ServerName% SET W3SVC/%SiteID%/LogExtFileProtocolVersion  True
cscript /nologo %AdsUtil% -s:%ServerName% SET W3SVC/%SiteID%/LogExtFileHttpSubStatus    True
cscript /nologo %AdsUtil% -s:%ServerName% SET W3SVC/%SiteID%/LogExtFileHost             False
cscript /nologo %AdsUtil% -s:%ServerName% SET W3SVC/%SiteID%/LogExtFileCookie           False
ECHO.
ECHO done.
pause

GOTO _exit


:_help
ECHO IIS W3C LogExt 設定程式
ECHO.
ECHO SetLogExtFile.bat ServerName SiteID
ECHO.
ECHO 使用範例:
ECHO SetLogExtFile.bat Web1 178978434
ECHO.
GOTO _exit

:_exit

若要使用我這支程式,可以指定「主機名稱」與「網站ID」即可,例如:

SetLogExtFile.bat Web1 178978434

若你不知道什麼是「網站ID」的話,可以開啟 網際網路資訊服務 (IIS) 管理員 後,點選 網站 節點,在右側選單即可看見 識別元 欄位,這個欄位就是我所謂的「網站ID」。

開啟 網際網路資訊服務 (IIS) 管理員 後,點選 網站 節點,在右側選單即可看見 識別元 欄位

如過你要設定 擴充紀錄選項 跟我不一樣的話,可以自行修改批次檔的內容,我想這幾行應該很容易理解。

一個比較常用的例子是我在 在 Windows 主機設定 AWStats 流量分析軟體 文章中的步驟 3.1 修正 Log 格式這部分,就可修改批次檔為如下的設定:

@ECHO OFF

IF [%1] == [/?] GOTO _help
IF [%1] == [] GOTO _help
IF [%2] == [] GOTO _help

SET ServerName=%1
SET SiteID=%2

ECHO Configuring Server [%ServerName%] on SiteID [%SiteID%]'s LogExtFile Flags ...
ECHO.

SET AdsUtil=C:\Inetpub\AdminScripts\adsutil.vbs
cscript /nologo %AdsUtil% -s:%ServerName% SET W3SVC/%SiteID%/LogExtFileDate            True
cscript /nologo %AdsUtil% -s:%ServerName% SET W3SVC/%SiteID%/LogExtFileTime            True
cscript /nologo %AdsUtil% -s:%ServerName% SET W3SVC/%SiteID%/LogExtFileClientIp        True
cscript /nologo %AdsUtil% -s:%ServerName% SET W3SVC/%SiteID%/LogExtFileUserName        True
cscript /nologo %AdsUtil% -s:%ServerName% SET W3SVC/%SiteID%/LogExtFileSiteName        False
cscript /nologo %AdsUtil% -s:%ServerName% SET W3SVC/%SiteID%/LogExtFileComputerName    False
cscript /nologo %AdsUtil% -s:%ServerName% SET W3SVC/%SiteID%/LogExtFileServerIp        False
cscript /nologo %AdsUtil% -s:%ServerName% SET W3SVC/%SiteID%/LogExtFileMethod          True
cscript /nologo %AdsUtil% -s:%ServerName% SET W3SVC/%SiteID%/LogExtFileUriStem         True
cscript /nologo %AdsUtil% -s:%ServerName% SET W3SVC/%SiteID%/LogExtFileUriQuery        True
cscript /nologo %AdsUtil% -s:%ServerName% SET W3SVC/%SiteID%/LogExtFileHttpStatus      True
cscript /nologo %AdsUtil% -s:%ServerName% SET W3SVC/%SiteID%/LogExtFileWin32Status     False
cscript /nologo %AdsUtil% -s:%ServerName% SET W3SVC/%SiteID%/LogExtFileBytesSent       True
cscript /nologo %AdsUtil% -s:%ServerName% SET W3SVC/%SiteID%/LogExtFileBytesRecv       False
cscript /nologo %AdsUtil% -s:%ServerName% SET W3SVC/%SiteID%/LogExtFileTimeTaken       False
cscript /nologo %AdsUtil% -s:%ServerName% SET W3SVC/%SiteID%/LogExtFileServerPort      False
cscript /nologo %AdsUtil% -s:%ServerName% SET W3SVC/%SiteID%/LogExtFileUserAgent       True
cscript /nologo %AdsUtil% -s:%ServerName% SET W3SVC/%SiteID%/LogExtFileReferer         True
cscript /nologo %AdsUtil% -s:%ServerName% SET W3SVC/%SiteID%/LogExtFileProtocolVersion True
cscript /nologo %AdsUtil% -s:%ServerName% SET W3SVC/%SiteID%/LogExtFileHttpSubStatus   False
cscript /nologo %AdsUtil% -s:%ServerName% SET W3SVC/%SiteID%/LogExtFileHost            False
cscript /nologo %AdsUtil% -s:%ServerName% SET W3SVC/%SiteID%/LogExtFileCookie          False
ECHO.                                                                           
ECHO done.
pause

GOTO _exit


:_help
ECHO IIS W3C LogExt 設定程式
ECHO.
ECHO SetLogExtFile.bat ServerName SiteID
ECHO.
ECHO 使用範例:
ECHO SetLogExtFile.bat Web1 178978434
ECHO.
GOTO _exit

:_exit

備註:此指令碼僅適用於 Windows Server 2003 下的 IIS 6 喔。如果你的電腦是 Windows XP 的話,必須修正批次檔中執行 Adsutil.vbs 的參數。

相關連結