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

有時後我們會需要修改 IIS 中 W3C 擴充紀錄檔案格式 的紀錄內容，特別是「擴充紀錄選項」設定，因為 IIS 預設勾選的欄位很少，所以較無法分析出有用的資訊，所以通常每次安裝好 IIS 之後我都會修改這裡的欄位（如下圖示），最近為了替客戶修改「一群」主機，所以寫了個簡易的批次檔可透過 [Adsutil.vbs 管理指令碼](https://learn.microsoft.com/en-us/previous-versions/iis/6.0-sdk/ms525006\(v=vs.90\)) 修改特定網站的「**擴充紀錄選項**」的設定。

![IIS 網站內容設定 - 網站 - 啟用紀錄 - 現用的紀錄格式 - W3C 擴充紀錄檔案格式](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/f76b4780903e9367c9dc-image_3.png)

![紀錄內容 - 進階 - 擴充紀錄選項](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/70ac3ca68222a97abcd4-image_6.png) 

指令碼如下（這是個批次檔，你可以複製起來儲存到 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) 管理員 後，點選 網站 節點，在右側選單即可看見 識別元 欄位](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/f66aa25b525bc793c640-image_9.png)

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

一個比較常用的例子是我在 [在 Windows 主機設定 AWStats 流量分析軟體](/post/2007/11/30/How-to-install-AWStats-traffic-statistics-software-in-Windows) 文章中的步驟 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*](https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc781546\(v=ws.10\)) *的參數。*

**相關連結**

-   [使用 Adsutil.vbs 管理指令碼](https://learn.microsoft.com/en-us/previous-versions/iis/6.0-sdk/ms525006\(v=vs.90\))
-   [Using the Adsutil.vbs Administration Script (IIS 6.0)](https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc781546\(v=ws.10\))
-   [使用命令列管理指令碼](https://learn.microsoft.com/en-us/previous-versions/iis/6.0-sdk/ms525006\(v=vs.90\))
-   [Command-line Tools Included in IIS](http://msdn.microsoft.com/en-us/library/ms525006.aspx)
