如何監視及疑難排解在 Exchange Server 2003 或 Exchange 2000 Server 中的分頁集區記憶體的使用

文章翻譯 文章翻譯
文章編號: 912376 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

結論

大小或用戶端存取語彙基元 (Token) 的數量可以是正在執行 Microsoft Exchange Server 的伺服器可以支援的用戶端數目的限制因素。本文將告訴您,如何將安全性語彙基元 (Token) 配置在支援的用戶端連線的 Exchange 伺服器上。此外,本文包含如何監視和控制的語彙基元的記憶體使用的建議。

每個存取語彙基元 (Token) 需要一些 Microsoft Windows 核心記憶體。量,會根據數個因素而有所不同。群組成員資格是其中一個最重要的因素。語彙基元增加數目的群組成員資格的直接比例大小。

這份文件包含的指令碼示範計算安全性權杖,並產生 Exchange 使用者所屬的安全性群組數目相關的統計資料的方式。這項資訊可以幫助您估計記憶體聯的存取權杖中大小
那些使用者。

簡介

本文將告訴您,如何以主動管理,並減少用戶端連線至 Exchange 所使用的分頁集區記憶體的使用伺服器。您可以控制大小與存取語彙基元 (Token) 的數目,以降低分頁集區記憶體的使用。Hotfix 912480 直接減少用戶端存取語彙基元時它會連接到 Microsoft Exchange Server 2003 Service Pack 2 (SP2) 用戶端所使用的數目。本文的其餘部份將告訴您,如何縮小存取語彙基元。此外,本文將告訴您可用來控制、 散佈,並最佳化用戶端連線內容中存取語彙基元 (Token) 的其他方法。

使用最佳化用戶端語彙基元 (Token) 使用 Exchange 2003 SP2 的 Hotfix。此 Hotfix 可減少與相關最多三分之一的 MAPI 用戶端的語彙基元的記憶體耗用量。您應該套用此 Hotfix,如果您遭遇到分頁集區記憶體耗用問題所造成的語彙基元的配置。 如需有關 Hotfix 912480,按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
912480裝載許多 Outlook 用戶端工作階段中的 Exchange Server 2003 伺服器可能用盡分頁集區記憶體

其他相關資訊

存取語彙基元 (Token)

Windows 帳戶嘗試存取受保護的 Windows 建構存取權杖的資源。存取權杖用來判斷是否應該授與存取,以及應授與多少存取。語彙基元 (Token) 是由裝載該資源的伺服器建置。伺服器會查詢適當的網域控制站,以取得語彙基元資訊。

存取語彙基元組成數項資訊,最值得注意的是 「 安全性識別碼 (SID 為使用者帳戶及使用者帳戶所屬的安全性群組)。使用者驗證到伺服器之後適當使用者和使用者的群組成員資格相關聯的 SID 將放在存取權杖中。SID 是唯一識別 Windows 安全性主體或安全性群組的數字的字串。如需詳細資訊檢視 < 安全性識別元技術參考 > 文件。若要欲這份文件請造訪下列 Microsoft 網站]:
http://technet2.microsoft.com/windowsserver/en/library/a320b892-f678-490d-adf0-fb97984c2bd71033.mspx
SID 是沒有更多的秘密,比登入名稱。SID 是物件名稱相關聯的唯一數字識別碼。SID 會保持相同 Active Directory 物件的存留期 (Lifetime)。因此,SID 可用來斬釘截鐵識別不論其他物件屬性是否變更物件。

在伺服器上的每個安全的資源有判別存取控制清單 (DACL) 與其相關聯。DACL 列出允許或拒絕存取資源的 SID。

當使用者嘗試存取安全的資源時,使用者的存取權杖中的 SID 清單會比較與資源的 DACL 中的 SID 的清單。如果在權杖中的 SID 符合資源的 DACL 中的 SID,是授與適當的存取。您不能可靠地判斷使用者帳戶所屬的計算會列示在使用者物件的 [成員隸屬] 屬性的群組數目的安全性群組數目。這是因為下列的四個因素:
  • 群組巢狀結構

    在原生模式 Microsoft Windows 2000 網域] 或 [Windows Server 2003 功能模式網域群組可以更彈性比巢狀混合模式網域。當群組加入至使用者的權杖時,也會新增巢狀群組的 SID。
  • 萬用群組成員資格

    如果使用者帳戶網域處於混合模式,萬用群組不會新增至存取語彙基元。只要該帳戶所屬的網域轉換成原生模式或其中一種 Windows Server 2003 功能模式,萬用群組成員資格會新增到語彙基元。
  • SIDHistory

    從 Microsoft Windows NT 4.0 網域或其他 Active Directory 網域遷移的帳戶可能有許多群組成員資格在其 SIDHistory 屬性。如需有關 SIDHistory 的詳細資訊,請造訪下列 Microsoft 網站 (英文):
    http://technet.microsoft.com/en-us/library/Bb727125.aspx
    SIDHistory,僅適用於已在 Windows 2000 原生模式或 Windows Server 2003 功能模式中的使用者帳戶網域。 如果使用者帳戶網域處於混合模式,從 SIDHistory 群組將被忽略。在練習中,這些群組應該不存在。
  • 網域本機群組

    如果受保護的資源裝載在 Windows 2000 原生模式或 Windows Server 2003 功能模式網域,在資源網域使用者帳戶所屬的網域本機群組會新增到語彙基元 (Token)。 比方說假設網域 A 中的使用者嘗試存取資源,以在網域 B。在 Windows 2000 原生模式或 Windows Server 2003 功能模式中,使用者所屬的網域 B 中的網域本機群組會新增到存取語彙基元。使用者所屬的網域 A 中的網域本機群組將不會加入到語彙基元所產生的伺服器位於網域 B。這是因為網域本機群組從網域 A 是不相關對網域 B。

語彙基元的複本

使用者的存取權杖儲存在分頁集區核心記憶體在伺服器上。任何時候有可能是多份在記憶體中的每個使用者的權杖。比方說如果用戶端使用 NET USE 命令對應在 Windows Server 2003 伺服器上的共用資源,兩份使用者的權杖會保留在伺服器支援這個連線。

每個連線到 Exchange 伺服器的用戶端應用程式很可能產生多個使用者權杖的取決於應用程式和它的組態複本。

沒有可用的分頁集區記憶體有限的數量。因此,是一個伺服器可以維持在同一時間的用戶端連線數目的限制。在 Windows 架構的伺服器具有多個 1 GB 的實體記憶體安裝,最大的分頁集區記憶體是約 350 百萬位元組 (MB)。 此數量可能會降低由記憶體微調改的可能在較短的補給其他資源。

大規模的 Exchange 伺服器的記憶體微調建議包括使用的 / 3GB boot.ini 參數。這會減少最大的分頁集區記憶體為小於 250 MB。在此內容中大規模的 Exchange 伺服器是 RAM 的主機數千個信箱,且該有多個 1 GB 的安裝。

如果您不使用 / 3GB 很可能 Exchange Server 服務,就可以重新啟動定期重組虛擬記憶體參數。關閉其他應用程式記憶體的分頁集區核心記憶體貿易是值得的取捨。 但是,這三者之間的折衷表示必須更加密切監視分頁集區記憶體的使用。 如更多有關記憶體微調 Exchange 伺服器的資訊,按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項:
815372如何最佳化 Exchange Server 2003 中的記憶體使用量
此外,檢視 < Ruling 出記憶體繫結問題 > 一節的 < 疑難排解 Exchange Server 2003 效能"白色紙張。若要欲這份白皮書請造訪下列 Microsoft 網站]:
http://technet.microsoft.com/en-us/library/4b012bda-8711-4617-9239-f3527de884a3.aspx
用戶端語彙基元 (Token) 通常是最大的單一取用者的 Exchange 伺服器上的分頁集區記憶體。如果一般的使用者語彙基元是大型,分頁集區記憶體耗用量很可能會變成一個重要瓶頸的 Exchange 伺服器延展性。

如何計算語彙基元大小

存取語彙基元大小 (以位元組為單位) 可以估計藉由使用下列公式:
[12 x 數目的使用者權限] + [語彙基元的額外負荷] + [44 x 數目的群組成員資格] = 語彙基元大小 (以位元組為單位)
  • 使用者權限包括如"本機登入 」 或 「 從網路存取這台電腦 」 的權限。唯一的使用者的權限加入存取權杖的是主控安全的資源在伺服器設定這些使用者權限。大多數的 Exchange Server 使用者很可能具有在 Exchange 伺服器上只有兩個或三個使用者權限。系統管理員可能會有數十種使用者權限。每個使用者權限要求將其儲存在語彙基元的 12 個位元組。
  • 語彙基元 (Token) 負荷包括多個欄位,例如語彙基元的來源]、 [到期時間] 和 [模擬資訊。典型的網域使用者沒有特殊存取或限制,語彙基元 (Token) 負荷很可能是 400 和 500 位元組之間。通常,估計使用者權利和語彙基元 (Token) 負荷的 500 個位元組是多個足夠。
  • 每個群組成員資格將群組 SID 加入語彙基元,加上額外的 16 個位元組,相關聯的屬性和資訊。 最大可能大小的 SID 為 68 位元組。不過,很少會此大 SID。在 Windows Server 2003 和舊版中,典型的 SID,使用者或群組會是 Windows 的 28 位元組的長度。因此,使用者屬於哪個通常每個安全性群組中新增使用者的語彙基元大小 44 個位元組。

語彙基元的記憶體配置

如果是語彙基元少於 4 千位元組 (KB) 則的配置給它的核心記憶體正好什麼是必要保留此語彙基元。 例如,考慮一般使用者屬於 30 安全性群組。在 < 如何計算語彙基元大小 > 一節中使用公式所提及,這位使用者的語彙基元將會 1,820 個位元組 (44 位元組 x 30 群組 + 500 的額外負荷位元組 = 1,820)。

但如果語彙基元值甚至稍微大於 4 KB (4096 個位元組),配置每個複本的記憶體數量會跳到完全 8 KB (8,192 個位元組)。如果語彙基元值甚至稍微大於 8 KB,記憶體配置會跳到完全 12 KB。因此,語彙基元大小交叉這些重要的 4 KB 界限的其中一個每次有是分頁集區記憶體的使用中的突然跳轉。

通常,使用者屬於多個 80 安全性群組會附近,或將超過 4 KB 界限。因此,使用者需要 8-KB 語彙基元。如果使用者屬於多個 170 群組,語彙基元是可能會需要 12 KB 等等。

下列範例會說明如何重要,是監視和控制平均用戶端的語彙基元大小。請考慮 Exchange 2003 Service Pack 2 伺服器所有的用戶端使用的是 Microsoft Office Outlook 2003 快取模式。典型的快取模式用戶端會使它在 Windows Server 2003 電腦上產生的權杖的七個或八個複本。如果平均用戶端語彙基元確實 4 KB 每個快取模式用戶端需要最多為 32 KB 的分頁集區記憶體。

附註< 簡介 > 一節所述的 Microsoft Exchange 資訊儲存庫服務 Hotfix 可以將的語彙基元的副本,為每個快取模式使用者數目減少到四個或五個代替 7 或 8。此 Hotfix 排定要包含在 Microsoft Exchange Server 2003 Service Pack 3 中。

如果伺服器設定藉由使用 / 3GB 切換,就有愈大約 250 MB 的分頁集區記憶體配置在伺服器上。我們建議一般分頁集區消耗伺服器應該是不能超過 200 MB。您必須保留在伺服器負載的尖峰的足夠記憶體。如果分頁集區記憶體耗用量通常是 220 MB 以上,您應該採取立即的步驟,以減少伺服器負載。

假設 150 MB 的分頁集區記憶體可供 Exchange Server 用戶端語彙基元 (Token)。如果每個用戶端語彙基元 (Token) 4 KB 伺服器可以稍微調支援多個 4,500 並行的 Outlook 快取模式使用者之前語彙基元使用將會變成瓶頸。請注意套用 Hotfix 912480 會增加此 7,300 快取模式使用者的最大值。如果要跳至 8 KB 語彙基元大小,用戶端最大數目會減少不論是否已套用 Hotfix 912480 的一半。

附註若在線上模式執行 Outlook 2003,將通常會有三個或四個語彙基元的複本,不論是否已套用 Hotfix 912480 每個用戶端。

耗用核心記憶體的徵狀

如果核心記憶體資源接近要被耗盡,伺服器速度變慢,或拒絕其他的要求和連接。 應用程式可能會突然失敗。此外,連接到受影響的伺服器嘗試可能會傳回錯誤 1450,「 沒有足夠系統資源 」。在極端情況下伺服器可能會在藍色畫面上顯示錯誤訊息,並停止回應。

此外,系統記錄檔中可能會記錄下列事件:

事件識別碼: 2019年
來源: SRV
描述: 伺服器無法配置來自未分頁系統因為集區是空的集區。

事件識別碼: 2020年
來源: SRV
描述: 伺服器無法從系統分頁集區配置,因為是空的集區。

事件識別碼: 2000年
來源: SRV
描述: 此伺服器呼叫對系統服務意外地失敗。

如果是暫時性的分頁集區記憶體不足,將可能復原伺服器。應用程式可能會有點有彈性的記憶體暫存不足。但是,沒有應用程式可以執行永遠如果未能滿足重要的資源要求。如果分頁集區記憶體不足會持續時間很久,很可能觸發階層式的瓶頸。在這種案例伺服器將可能需要重新啟動,使其功能一次。

在標準負載下應該要有大約 50 MB 的可用分頁集區記憶體。如果您少於 30 百萬位元組可用您應該採取立即的步驟,以減少伺服器負載。

在 Windows 期間以靜態方式配置分頁集區記憶體啟動。集區不能增加而不必重新設定並重新啟動伺服器。可用的分頁集區記憶體數量取決於幾個因素。 這些因素包括開機參數,例如 / USERVA/ 3GB,登錄設定及實體 RAM。

如何縮減使用者存取語彙基元 (Token) 大小

您可以使用下列三種策略來減少語彙基元大小:
  • 減少每個使用者所屬的安全性群組。
  • 裝載在不同的網域,自連線至 Exchange 伺服器的使用者的 Exchange 伺服器。

    這個策略可以刪除使用者帳戶網域從 Exchange 伺服器會向權杖的網域本機群組來減少使用者語彙基元 (Token) 的大小。此方法可行,因為從一個網域的網域本機群組不會保存在不同網域中的伺服器產生語彙基元。
  • 當您可以將安全性群組轉換到通信群組。

    不增加安全性群組中的成員資格的語彙基元大小通信群組。使用者可以隸屬於數千個通訊群組不會影響語彙基元的大小。如果群組不正用來拒絕或授與資源存取權,它應該是通訊群組不安全性群組。

如何減少存取語彙基元 (Token),在伺服器上的記憶體數量

當您降低典型的語彙基元大小了實際的最小值下, 一步就是管理對伺服器所作的同時連線數目。您可以使用下列方法來管理同時連線數目:
  • 限制未授權的用戶端與應用程式。

    每個用戶端可能會使伺服器的多個連線。 此外,不同的用戶端提出不同的數字的各種不同的因素為基礎的連線。您可能甚至沒有連線到伺服器的所有用戶端的完整清單。使用者可能會安裝 Outlook 增益集,使額外的連線。開發人員可能會執行應用程式,請多連線或,執行不關機連線在完成時。 因此,您應分析種類的用戶端連線到伺服器和它們在核心記憶體使用量上有何種效果。如需詳細資訊請參閱 < 如何檢視語彙基元的配置大小 」 一節。
  • 從伺服器移除公用資料夾儲存區。然後,將不同的伺服器上的公用資料夾的用戶端導向。

    此動作可消除用戶端所做的公用資料夾連線。
  • 移除特定的許多用戶端連線的公用資料夾。

    移除的良好候選是 Schedule + 空閒/忙碌資訊資料夾及離線通訊錄。排程約會,或下載通訊錄時,用戶端必須進行額外的連線至這些資料夾。
  • 新增散發在多部伺服器連接的用戶端數目經常存取的公用資料夾的複本。
  • 安裝專用的公用資料夾伺服器,以消除的信箱伺服器的所有公用資料夾連線。
  • 均衡重型連線使用者在多部伺服器。最粗連線使用者很可能是有多部電腦或裝置的人和那些人是行動使用者。
  • 散發在多部伺服器大型的安全性語彙基元 (Token) 的使用者。
  • 套用 Hotfix 912480 語彙基元的最佳化。 如需有關 Hotfix 912480,按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
    912480裝載許多 Outlook 用戶端工作階段中的 Exchange Server 2003 伺服器可能用盡分頁集區記憶體

如何監視 Exchange 伺服器上的分頁集區記憶體

通常,您應該有 50 MB 的可用典型伺服器下的可用分頁集區記憶體載入條件。此外,您還應該有 30 MB 的可用在尖峰負載下。

很容易就可以判斷目前正在使用多少分頁集區記憶體。Windows 工作管理員 」 會顯示分頁集區使用量,在 [效能] 索引標籤上的 [核心記憶體] 區域中。您也可以監視分頁集區記憶體的使用,經過一段時間,與在 [Windows 系統監視器] 中的 [Memory\Pool 分頁位元組] 計數器。

Exchange 伺服器設定為使用 / 3GB 開機參數會有的大約 250 MB 的最大可能的分頁集區記憶體大小。此外,這台伺服器也必須非-分頁集區-記憶體上限為 128 MB。沒有 / / 3GB 切換,最大值是 350 MB 的分頁集區記憶體及 256 MB 的未分頁集區記憶體。

因此,典型的大規模 Exchange 伺服器應該使用不能超過 200 MB 的分頁集區記憶體,在一般情況下。超過 220 MB 的分頁集區記憶體使用需要立即處理。

如果您是在這些限制內,而且伺服器會報告與耗用分頁集區記憶體相關的錯誤,則可能是初始分頁集區記憶體配置是較少超過預期。這可能因硬體需求的裝置驅動程式,或藉由記憶體調整可降低初始分頁集區記憶體配置更多。大型記憶體組態,比方說超過 4 GB 的實體 RAM 是這個問題的最常見的原因。

每個位元組安裝在伺服器的實體 RAM 需要一些核心記憶體位址,並管理它。已安裝更多的 RAM 更多的核心位址空間必須保留給它。地址空間可能借用從分頁集區記憶體來滿足這個需求。

我們建議您執行不安裝 4 GB 以上的實體 RAM 專門用來執行 Exchange Server 2003 的伺服器中。Exchange 伺服器將使有效率地使用 4 GB 的 RAM。不過,Exchange 伺服器將不利用其他的 RAM 即使是可用。伺服器支援熱新增記憶體功能也可能會造成重大縮減在分頁集區記憶體的可用性。若即使安裝不能超過 4 GB 的 RAM 位址空間可能會被保留作為 hot-add 可能安裝的 RAM 理論最大數量。

您可以使用一個核心偵錯工具來檢視初始分頁集區記憶體的大小和其他核心記憶體配置。

重要核心,偵錯工作階段期間可使用的指令可以使系統變得不穩定或停止。建議之前啟始偵錯工作階段的核心,停止所有的 Exchange Server 服務,您在工作階段之後重新啟動伺服器。

設定傳統的核心偵錯 Windows 2000 的工作階段可以是複雜的工作。 這項工作通常會需要額外的電腦、 特殊纜線和重新啟動伺服器。

或者,從 Sysinternals LiveKD 公用程式可用來啟動一個核心偵錯工作階段從伺服器主控台。LiveKD 並不需要重新啟動伺服器。 如需詳細資訊,請按一下下列的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:
894067[效能] 工具不會準確地顯示可用的可用系統分頁表項目在 Windows Server 2003
為 Windows Server 2003 KD 核心偵錯工具支援直接從伺服器主控台,而不需要特殊準備或硬體偵錯。若要取得偵錯工具的 Windows,請造訪下列 Microsoft 網站]:
http://www.microsoft.com/whdc/devtools/debugging/default.mspx
使用 KD.EXE-KL 命令,以啟動偵錯工具。然後,執行 ! vm 命令來檢視最大的分頁集區記憶體。比方說,請執行下列命令:
KD.EXE-KL
! VM

如何檢視語彙基元的配置大小

Outlook 不是唯一的用戶端可以連線到 Exchange Server 資料庫。Outlook 增益集包括郵件的桌面搜尋引擎搜尋即時訊息用戶端的功能及自訂應用程式可以所有進行額外的連線,並造成額外的語彙基元複本產生。

您可以在實驗室環境中使用 Poolmon.exe 公用程式來確認用戶端或應用程式的效果。要這麼做,請您執行下列步驟:
  1. 產生隔離的實驗室 Exchange 組織。
  2. 在 Exchange 伺服器上安裝 Poolmon。 如更多有關如何設定 Poolmon.exe,按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
    177415如何使用記憶體集區監視器 (Poolmon.exe) 來疑難排解核心記憶體遺漏 (Memory Leak)
  3. 執行與 Poolmon.exe / iToke 參數 (Poolmon /iToke)。請注意,/ iToke 參數是區分大小寫。這將會設定 Poolmon.exe 顯示語彙基元的配置。您也可以在實際執行伺服器上使用此命令即時檢視總語彙基元的配置。
  4. 設定類似於一般 Exchange Server 使用者在您的環境中的 Active Directory 使用者帳戶。也就是設定的對等的編號為安全性群組成員資格、 類似的權限設定檔等等的使用者帳戶。
  5. 測試使用者擁有用戶端應用程式和您想要測試的組態,登入 Exchange 伺服器。等候數分鐘後您登入用戶端應用程式完全載入與穩定下來。
  6. 當您注意到中 Poolmon.exe 語彙基元的位元組中變更時,請結束用戶端應用程式。您可能必須執行以取得的多少位元組會釋放時結束用戶端的精確讀取此數次。其他語彙基元的配置可能會建立,或在同一時間測試期間終結。
附註如果您變更使用者帳戶,例如藉由新增或刪除安全性群組成員資格您必須登出從 Windows 帳戶,然後再登入之前這些變更將反映在存取權杖。

如何稽核群組成員資格

下列的指令碼範例包含命令列參數及頂端的每個指令碼的指示。您可以貼入記事本中的指令碼,然後將它們儲存成.vbs 檔案。不要將檔案儲存成.txt 檔案。
  • Exchange 伺服器信箱使用者帳戶名稱及它們所屬的安全性群組,則會列印 Groups.vbs 指令碼。此外,列印的結果包含列出從 SIDHistory 群組的個別資料行。可以限制單一的 Exchange 伺服器的指令碼,或使用萬用字元取得多個 Exchange 伺服器的報表。

    附註您無法使用萬用字元 (*) 來存取所有 Exchange 伺服器。您必須提供至少一個部分的伺服器名稱。比方說您可以使用字串,類似下列:
    EXCH-HQ-*
  • Groups_statistics.vbs 指令碼提供文字基礎長條圖檢視,其顯示多少使用者屬於 50 群組、 60 群組、 70 群組等等。這可幫助您判斷可能會平均語彙基元大小的使用者。
請參閱 < 如何將計算語彙基元大小中 > 及 」 語彙基元記憶體配置 」 區段如詳細語彙基元大小的相關資訊。

指令碼

Groups.vbs
'==============================================================================
' NAME: Groups.vbs
' AUTHOR: Kyryl Perederiy, Microsoft IT, MACS Engineering
' DATE  : 12/15/2005
' COMMENT: The script runs through all mailbox enabled user objects in the 
' forest and calculates the number of security groups and groups in SID 
' history for each object. User objects can be filtered by Exchange home server.
' PARAMETERS: <output file> <GC Domain Controller> <Domain Naming Context> [<Exchange Server(s)>]
' EXAMPLE: CSCRIPT groups.vbs groups.tsv EXCH-DC-01 dc=root,dc=company,dc=com EXCH-MBX-*
' Version 1.0
'==========================================================================
On Error Resume Next
Set strArgs = WScript.Arguments
Set fso = CreateObject("Scripting.FileSystemObject")
Set fileStream = fso.OpenTextFile(strArgs(0), 2, True, TristateTrue)
fileStream.WriteLine "DN	Mail	Domain	Login	Server	GRP	SIDHISTORY"

Count=0
DCS = strArgs(1) ' Domain Controller
strDomainNC = strArgs(2) ' Domain Naming Context for the forest
strFilter = "(&(mail=*)(objectCategory=person)(objectClass=user)" &_
			"(msExchHomeServerName=*" & strArgs(3) & "))" 'Mail users search filter

Set oConnection = CreateObject("ADODB.Connection") ' Setup the ADO connection
Set Com = CreateObject("ADODB.Command")
oConnection.Provider = "ADsDSOObject"
oConnection.Open "ADs Provider"
Set Com.ActiveConnection = oConnection ' Create a command object on this connection
Com.CommandText = "<LDAP://" & DCS & ":3268/" & strDomainNC & ">;" &_
					strFilter & ";distinguishedName,mail,sAMAccountName," &_
					"msExchHomeServerName,SIDHistory,homeMDB;subtree"

' Set search preferences
Com.Properties("Page Size") = 1000
Com.Properties("Asynchronous") = True
Com.Properties("Timeout") = 120 ' seconds
set oRecordSet = Com.Execute

oRecordSet.MoveFirst

While Not oRecordset.Eof

	Count=Count+1
	DN = oRecordset.Fields("distinguishedName").Value
	Mail = oRecordset.Fields("mail").Value
	Server = oRecordset.Fields("msExchHomeServerName").Value
	Server = Mid(Server,InStrRev(Server,"=")+1)
   	Domain = Split(DN,",DC=")
	Login = UCase(Domain(1)) & "\" & oRecordset.Fields("sAMAccountName").Value
	
	set oDirObject = GetObject("LDAP://" & DCS & "/" & replace(DN,"/","\/"))

	' tokenGroups is a computed attribute that contains the list of SIDs 
	' due to a transitive group membership expansion operation on a given user
	oDirObject.GetInfoEx ARRAY("tokengroups"),0 
	
	' Size of the array correspond to the number of groups
	GROUPS = ubound(oDirObject.GetEx("tokengroups"))+1

	If IsNull(oRecordSet.Fields("SIDHistory").Value ) Then 
		SIDHIST = "0" 
	Else 
		SIDHIST = ubound(oDirObject.GetEx("sidhistory"))
	End If

	WScript.Echo Count & CHR(9) & DN & CHR(9) & GROUPS
	fileStream.WriteLine _
		DN & CHR(9) &_
		Mail & CHR(9) &_
		UCase(Domain(1)) & CHR(9) &_
		Login & CHR(9) &_
		Server & CHR(9) &_
		GROUPS & CHR(9) &_
		SIDHIST & CHR(9)

	oRecordset.MoveNext

Wend

WScript.Echo "Total: " & Count & " users found on the server(s): " & strArgs(3)
Groups_statistics.vbs
'==========================================================================
' NAME: groups_statistics.vbs
' AUTHOR: Kyryl Perederiy, Microsoft IT, MACS Engineering
' DATE  : 12/15/2005
' COMMENT: The script runs through all mailbox enabled user objects in the 
' forest and calculates statistical distribution for group membership.
' PARAMETERS: <output file> <GC Domain Controller> <Domain Naming Context> [<ExchHomeServerName>]
' EXAMPLE: CSCRIPT groups_statistics.vbs groups_statistics.tsv EXCH-DC-01 dc=root,dc=company,dc=com EXCH-MBX-0*
' Version 1.0
'==========================================================================
On Error Resume Next
Dim GROUPS(100)
Set strArgs = WScript.Arguments
Set fso = CreateObject("Scripting.FileSystemObject")
Set fileStream = fso.OpenTextFile(strArgs(0), 2, True, TristateTrue)
fileStream.WriteLine "Groups" & CHR(9) & "Users"

Count=0
DCS = strArgs(1) ' Domain Controller
strDomainNC = strArgs(2) ' Domain Naming Context for the forest
strFilter = "(&(mail=*)(objectCategory=person)(objectClass=user)" &_
			"(msExchHomeServerName=*" & strArgs(3) & "))" 'Mail users search filter

Set oConnection = CreateObject("ADODB.Connection") ' Setup the ADO connection
Set Com = CreateObject("ADODB.Command")
oConnection.Provider = "ADsDSOObject"
oConnection.Open "ADs Provider"
Set Com.ActiveConnection = oConnection ' Create a command object on this connection
Com.CommandText = "<LDAP://" & DCS & ":3268/" & strDomainNC & ">;" &_
					strFilter & ";distinguishedName,sAMAccountName;subtree"

' Set search preferences.
Com.Properties("Page Size") = 1000
Com.Properties("Asynchronous") = True
Com.Properties("Timeout") = 120 'seconds
set oRecordSet = Com.Execute

oRecordSet.MoveFirst

While Not oRecordset.Eof

	Count=Count+1
	set oDirObject = GetObject("LDAP://" & strArgs(1) & "/" &_
		replace(oRecordset.Fields("distinguishedName").Value,"/","\/"))
	oDirObject.GetInfoEx ARRAY("tokengroups"),0
	GRP = ubound(oDirObject.GetEx("tokengroups"))+1
	GROUPS(Int(GRP/10)) = GROUPS(Int(GRP/10)) + 1
	WScript.Echo Count & CHR(9) & oRecordset.Fields("sAMAccountName").Value & CHR(9) & GRP
	oRecordset.MoveNext
Wend
WScript.Echo "Total: " & Count & " users found"
WScript.Echo "See " & strArgs(0) & " for details..."
For i=0 to 100
	fileStream.WriteLine i*10 & CHR(9) & GROUPS(i)
Next

在本文所討論的協力廠商產品是由 Microsoft 以外的公司所製造的。Microsoft 可讓不以暗示或其他方式,效能或可靠性這些產品的保證。

屬性

文章編號: 912376 - 上次校閱: 2007年11月16日 - 版次: 2.4
這篇文章中的資訊適用於:
  • Microsoft Exchange Server 2003 Enterprise Edition
  • Microsoft Exchange Server 2003 Standard Edition
  • Microsoft Exchange 2000 Enterprise Server
  • Microsoft Exchange 2000 Server Standard Edition
關鍵字:?
kbmt kbhowto kbinfo KB912376 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:912376
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com