Active Directory 大量匯入和匯出逐步指南
本指南介紹如何聯合運用輕量型目錄存取協定 (LDAP) 資料交換格式 (LDIF) 公用程式及若干使用 Microsoft Visual Basic® Scripting Edition (VBScript) 開發系統編寫的範例程式,對 Active Directory® 服務進行批次管理。
本頁內容
簡介
逐步指南
Windows Server 2003 部署逐步指南提供了許多常見作業系統設定的實際操作經驗。本指南首先介紹透過以下程序來建立通用網路基礎結構,其中包括安裝 Windows Server 2003、設定 Active Directory®、安裝 Windows XP Professional 工作站,最後再將此工作站新增到網域中。後續的逐步指南將假定您已建立了此通用網路基礎結構。如果您不想遵循此通用網路基礎結構,則必須在使用這些指南時進行適當的修改。
通用網路基礎結構要求完成以下指南。
完成設定通用網路基礎結構後,便可以套用任何其他逐步指南。請注意,除了必須具備通用網路基礎結構需求外,某些逐步指南可能還會需要滿足額外的先決條件。任何額外的需求都將列在特定的逐步指南中。
Microsoft Virtual PC
Windows
Server 2003 部署逐步指南可以在實體實驗室環境中或透過虛擬技術 (如 Microsoft Virtual PC 2004 或
Virtual Server 2005) 來實施。藉由虛擬機器技術,客戶可以同時在一部實體伺服器上執行多個作業系統。Virtual PC
2004 和 Virtual Server 2005 就是為了在軟體測試和開發、舊版應用程式遷移以及伺服器整合方案中提高操作效率而設計的。
Windows Server 2003 部署逐步指南假定所有設定都是在實體實驗室環境中完成的,但是大多數的設定不需要修改就可以應用於虛擬環境中。
這些逐步指南中提供的概念在虛擬環境中的應用並不在本文的討論範圍之內。
重要說明
此處所描述之範例公司、組織、產品、網域名稱、電子郵件位址、商標圖樣、人員、地點及事件均屬虛構,並非影射任何真實的公司、組織、產品、網域名稱、電子郵件位址、商標圖樣、人員、地點及事件。
此通用基礎結構是專為在私人網路上使用而設計的。此通用基礎結構中使用的虛擬公司名稱和網域名稱系統 (DNS) 名稱並未註冊用於網際網路上。請勿在公共網路或網際網路上使用此名稱。
此
通用基礎結構的 Active Directory 服務結構是設計用於說明「Windows Server 2003 變更及組態管理」如何與
Active Directory 搭配使用。它並非設計用來作為任何組織設定 Active Directory 時所使用的模型。
概觀
本
指南介紹如何聯合運用 LDAP 資料交換格式 (LDIF) 公用程式及一個使用 Microsoft Visual Basic
Scripting Edition (VBScript) 開發系統編寫的簡單程式,對 Active Directory
服務進行批次管理。透過使用這些工具,您可以匯出、匯入以及修改物件,如使用者、連絡人、群組、伺服器、印表機以及共用資料夾。
在本指南中,您將執行以下任務。
• | 使用 Ldifde.exe 公用程式執行批次操作。將使用者匯出為與 LDIF 標準格式相容的檔案格式。執行所有使用者的批次修改。使用 LDIF 建立新使用者和刪除使用者。 |
• | 使
用 Active Directory Service Interfaces (ADSI) 和 VBScript 執行批次操作。使用 ADSI
和 VBScript 編寫的指令碼將使用者匯出到文字檔案。使用 VBScript 執行所有使用者的批次修改。使用 VBScript
建立新使用者和刪除使用者。 |
先決條件
使用 Ldifde.exe 公用程式
LDIF
是關於檔案格式的網際網路草稿標準,這種檔案格式可用於在符合 LDAP 標準的目錄上執行批次操作。LDIF 可用於匯出和匯入資料,因而可以在
Active Directory 中執行新增、修改及刪除等批次操作。Windows Server 2003 作業系統中包含一個名為
Ldifde.exe 的公用程式,用於支援基於 LDIF 標準的批次操作。
您還可使用 Ldifde.exe 公用程式來延伸架構,將 Active Directory 使用者和群組資訊匯出到其他應用程式或服務,以及使用來自其他目錄服務的資料填入 Active Directory。
注意:在將測試的架構延伸模組推入生產環境時,建議使用 Ldifde.exe 公用程式。
匯出物件
您可以使用 Ldifde.exe 公用程式匯出 Marketing 組織單位 (OU) 中的所有物件,這些物件是在「通用基礎結構逐步指南第一部分」中建立的。該範例搜尋 OU 中的某些物件,並建立一個包含這些物件名稱的檔案。
若要使用 LDIF 匯出物件
1. | 以網域系統管理員的身份登入。 |
2. | 按一下 [開始] 按鈕,指向 [所有程式],指向 [附屬應用程式],然後按一下 [命令提示字元]。 |
3. | 在 [命令提示字元] 中,輸入: ldifde
-f marketing.ldf -s hq-con-dc-01 -d
"ou=marketing,ou=accounts,dc=contoso,dc=com" -p subtree -r
"(objectCategory=CN=Person,CN=Schema,CN=Configuration,DC=contoso,DC=com)" |
4. | 按 Enter 鍵。結果應該與圖 1 中顯示的內容相似。 上
述命令使用以下方法來建立一個名為 Marketing.ldf 的 LDIF 檔案:連接到名為 HQ-CON-DC-01 的伺服器,並對
Marketing OU 執行子樹狀目錄搜尋以尋找類別為 Person 的所有物件。輸出檔案將位於目前使用者 Documents and
Settings 目錄的根目錄中。 注意:objectCategory 是用於提高搜尋效能的索引屬性。 您
可以使用該 LDIF 檔案執行大量匯入,將 Marketing OU 中的所有物件匯入到與 LDAP
相容的任何其他目錄中。某些屬性可能不適用於其他的 LDAP 實作。尤其在使用該機制將物件匯入到其他 Active Directory
中時,由於在建立物件期間將自動生成某些屬性,因此必須將這些屬性省略。(如果沒有明確省略它們,操作將會失敗。) 例如,除了新增參數 –m 外,用於省略這些屬性的 LDIFDE 命令與上述命令相同。 ldifde
-f marketing.ldf -s hq-con-dc-01 -d
"ou=marketing,ou=accounts,dc=contoso,dc=com" -p subtree -r
"(objectCategory=CN=Person,CN=Schema,CN=Configuration,DC=contoso,DC=com)"
–m |
修改物件
在以下範例中,整個 Marketing 組織搬到了新的辦公地點。可透過修改省、街道、縣/市以及郵遞區號屬性,使用 LDIF 對 Marketing 組織中的所有使用者物件進行大量修改。
若要使用 LDIF 和「記事本」修改物件
1. | 按一下 [開始] 按鈕,指向 [所有程式],指向 [附屬應用程式],然後按一下 [命令提示字元]。 |
2. | 在命令提示字元下,輸入以下命令以擷取所需的項目。 ldifde
-f marketing.ldf -s hq-con-dc-01 -d
"ou=marketing,ou=accounts,dc=contoso,dc=com" -p subtree –r
"(objectCategory=CN=Person,CN=Schema,CN=Configuration,DC=contoso,DC=com)"
-l "1,st,streetaddress,postalcode" 注意:在通用網路基礎結構指南中,沒有為 Marketing OU 內的使用者物件定義城市、省、地址以及郵遞區號的項目。建議在執行此匯出之前,為 Marketing OU 中的每個使用者物件填入這些欄位。 |
3. | 按 Enter 鍵。 |
4. | 使用「記事本」打開 marketing.ldf 文件。
注意:如果您使用資料填入每個使用者物件,則結果應該與圖 2 中顯示的內容相似。 圖 2. 檢查 LDF 檔案 |
5. | 在「記事本」中,修改 Marketing.ldf 中的每個使用者物件項目,使之與圖 3 的內容相似。注意:必須將檔案儲存為 .ldf 文件。 圖 3. 修改 LDF 匯入檔案 |
6. | 關閉「記事本」。在 [命令提示字元] 視窗中,輸入: ldifde –i -f marketing.ldf -s hq-con-dc-01 |
7. | 按 Enter 鍵。結果應該與圖 4 中顯示的內容相似。 圖 4. 成功匯入 LDF 檔案 |
8. | 若要確認已據此修改了使用者物件屬性,請使用 [Active Directory 使用者和電腦] 嵌入式管理單元。(有關使用該嵌入式管理單元的說明,請參閱 Active Directory 管理逐步指南。) |
注意:另
一個名為 Csvde.exe 的公用程式執行與 Ldifde.exe
公用程式相同的功能,但是它使用逗號分隔的檔案格式。使用該公用程式執行的匯入操作只能「新增」物件,而不能修改或刪除物件。Microsoft
Excel 等應用程式支援逗號分隔值 (CSV) 檔案格式。
建立和刪除物件
以下範例中使用 LDIF 在 Active Directory 中新增和刪除使用者。
若要使用 LDIF 建立新使用者
1. | 按一下 [開始] 按鈕,按一下 [執行],輸入 Notepad Newuser.ldf,然後按一下 [確定]。在出現提示時,按 [是] 建立新的檔案。 |
2. | 將以下文字新增到檔案中。 dn: CN=Pilar Ackerman,OU=Marketing,OU=Accounts,DC=contoso,DC=com changetype: add cn: Pilar Ackerman objectClass: user samAccountName: Pilar givenName: Pilar sn: Ackerman |
3. | 儲存 newuser.ldf 檔案,然後將其關閉。繼續進行使用者物件建立之前,檢查是否將檔案儲存到了 Documents and Settings 目錄中。 |
4. | 在 [命令提示字元] 視窗中,輸入以下內容。 ldifde –i -f newuser.ldf -s hq-con-dc-01 |
5. | 按 [Enter] 鍵。完成後, [命令提示字元] 視窗將確認修改(如圖 5 所示)。 圖 5. 新增新使用者 |
若要使用 LDIF 刪除使用者
1. | 按一下 [開始] 按鈕,按一下 [執行],輸入 [Notepad Deleteuser.ldf],然後按一下 [確定]。在出現相應提示時,按 [確定] 建立新的檔案。 |
2. | 將以下文字新增到檔案中。 dn: CN=Pilar Ackerman,OU=Marketing,OU=Accounts,DC=contoso,DC=com changetype: delete |
3. | 儲存 deleteuser.ldf 文件,然後將其關閉。 |
4. | 在 [命令提示字元] 視窗中,輸入以下內容。 ldifde –i -f deleteuser.ldf -s hq-con-dc-01 |
使用 VBScript 和 ADSI
ADSI 可以使啟用目錄的應用程式之開發工作更加輕鬆。您可以使用 VBScript 或 Microsoft JScript® 開發軟體編寫指令碼以執行大量目錄操作(與 Windows Script Host 一起使用)。在本指南中,使用 VBScript 編寫的簡單應用程式執行上一節描述的過程(它使用的是 LDIF)。
注
意,這些指令碼不包括任何錯誤檢查,這意味著它們不提供 VBScript 和 ADSI
的程式設計師參考。此處包含的所有範例都假設:您使用正確的憑證登入到屬於目標網域成員的電腦上。在 ADSI
中,可以明確指定憑證和目標網域。完成每個程序後,請檢查 [Active Directory 使用者和電腦] 嵌入式管理單元,確認項目已修改。
匯出物件
本範例中使用文字編輯器(如「記事本」)來建立 VBScript 程式。該指令碼搜尋 Marketing OU 並建立一個文字檔案,該檔案中將列出所有使用者物件及其屬性子集。
建立並執行匯出指令碼
1. | 按一下 [開始] 按鈕,按一下 [執行],輸入 [Notepad export.vbs],然後按一下 [確定]。在出現相應提示時,按 [確定] 建立新的檔案。將以下文字複製到 [export.vbs] 中。 'Global variables Dim oContainer Dim OutPutFile Dim FileSystem 'Initialize global variables Set FileSystem = WScript.CreateObject("Scripting.FileSystemObject") Set OutPutFile = FileSystem.CreateTextFile("marketing.txt", True) Set oContainer=GetObject("LDAP://OU=Marketing,OU=Accounts,DC=contoso,DC=com") 'Enumerate Container EnumerateUsers oContainer 'Clean up OutPutFile.Close Set FileSystem = Nothing Set oContainer = Nothing WScript.Echo "Finished" WScript.Quit(0) Sub EnumerateUsers(oCont) Dim oUser For Each oUser In oCont Select Case LCase(oUser.Class) Case "user" If Not IsEmpty(oUser.distinguishedName) Then OutPutFile.WriteLine "dn: " & oUser.distinguishedName End If If Not IsEmpty(oUser.name) Then OutPutFile.WriteLine "name: " & oUser.Get ("name") End If If Not IsEmpty(oUser.streetAddress) Then OutPutFile.WriteLine "streetAddress: " & oUser.streetAddress End If If Not IsEmpty(oUser.l) Then OutPutFile.WriteLine "l: " & oUser.l End If If Not IsEmpty(oUser.st) Then OutPutFile.WriteLine "st: " & oUser.st End If If Not IsEmpty(oUser.postalcode) Then OutPutFile.WriteLine "postalcode: " & oUser.postalcode End If Case "organizationalunit", "container" EnumerateUsers oUser End Select OutPutFile.WriteLine Next End Sub
|
2. | 儲存 export.vbs,然後關閉「記事本」。 |
3. | 在 [命令提示字元] 視窗中,輸入 export.vbs,然後按 [Enter] 鍵。 |
注意:執行 export.vbs 操作可建立 Marketing.txt 檔案,該檔案包含使用者及其屬性子集的清單。
在
進行適當的修改後,該指令碼就可以與支援 Microsoft 元件物件模型 (COM) 和 Visual Basic
技術的任何應用程式一起使用。這些應用程式包括 Visual Basic、Excel 以及 Microsoft Access。Internet
Explorer 和網際網路資訊服務也支援指令碼。
修改物件
在本範例中,將更改 Marketing OU 內的所有使用者位址屬性。可使用簡單的 VBScript 程式,對 Marketing 組織中的所有使用者物件執行大量修改。該指令碼修改省、街道、縣/市以及郵遞區號屬性。
建立並執行修改物件指令碼
1. | 按一下 [開始] 按鈕,按一下 [執行],輸入 [Notepad modify.vbs],然後按一下 [確定]。在出現相應提示時,按 [確定] 建立新的檔案。將以下文字複製到 [modify.vbs] 中。 Dim oContainer Set oContainer=GetObject("LDAP://OU=Marketing,OU=Accounts,DC=contoso,DC=com") ModifyUsers oContainer 'cleanup Set oContainer = Nothing WScript.Echo "Finished" WScript.Quit Sub ModifyUsers(oObject) Dim oUser oObject.Filter = Array("user") For Each oUser in oObject oUser.Put "st","Washington" oUser.Put "streetAddress","One Microsoft Way" oUser.Put "postalCode","98052" oUser.Put "l","Redmond" oUser.SetInfo Next End Sub
|
2. | 儲存 modify.vbs,然後關閉「記事本」。 |
3. | 在 [命令提示字元] 視窗中,輸入 modify.vbs,然後按 [Enter] 鍵。 |
建立和刪除物件
本範例中使用 VBScript 將新使用者新增到 Marketing 組織中。該範例說明如何使用 ADSI 和 VBScript 輕易地以程式設計方式存取目錄。注意,在本範例中,在使用者建立期間只設定了一組有限的屬性。
建立並執行物件建立指令碼
1. | 按一下 [開始] 按鈕,按一下 [執行],輸入 [Notepad add.vbs],然後按一下 [確定]。在出現相應提示時,按 [確定] 建立新的檔案。將以下文字複製到 [add.vbs] 中。 Dim oContainer Dim oUser Set oContainer=GetObject("LDAP://OU=Marketing,OU=Accounts,DC=contoso,DC=com") 'Create user Set oUser = oContainer.Create("User","CN=Pilar Ackerman") 'Assign values to user attributes oUser.Put "samAccountName","Pilar" oUser.Put "givenName","Pilar" oUser.Put "sn","Ackerman" oUser.Put "userPrincipalName","pilar@contoso.com" oUser.SetInfo 'Clean up Set oUser = Nothing Set oContainer = Nothing WScript.Echo "Finished" WScript.Quit
|
2. | 儲存 add.vbs,然後關閉「記事本」。 |
3. | 在 [命令提示字元] 視窗中,輸入 add.vbs,然後按 [Enter] 鍵。 |
建立並執行物件刪除指令碼
1. | 按一下 [開始] 按鈕,按一下 [執行],輸入 [Notepad delete.vbs],然後按一下 [確定]。在出現相應提示時,按 [確定] 建立新的檔案。將以下文字複製到 [delete.vbs] 中。 Dim oContainer Set oContainer=GetObject("LDAP://OU=Marketing,OU=Accounts,DC=contoso,DC=com") 'Delete user oContainer.Delete "user","CN=Pilar Ackerman" 'Clean up Set oContainer = Nothing WScript.Echo "Finished" WScript.Quit
|
2. | 儲存 delete.vbs,然後關閉「記事本」。 |
3. | 在 [命令提示字元] 視窗中,輸入 delete.vbs,然後按 [Enter] 鍵。 |
附錄 — 使用 LDIFDE
語法
ldifde
[-i] [-f FileName] [-s ServerName] [-c String1 String2] [-v] [-j Path]
[-t PortNumber] [-d BaseDN] [-r LDAPFilter] [-p Scope] [-l
LDAPAttributeList] [-o LDAPAttributeList] [-g] [-m] [-n] [-k] [-a
UserDistinguishedName Password] [-b UserName Domain Password] [-?]
參數
-i
-f FileName
-s ServerName
• | 指定執行匯入或匯出操作的網域控制站。預設情況下,Ldifde 會在安裝該公用程式的網域控制站上執行。 |
-c String1 String2
• | 以 String2 取代所有出現的 String1。通常在以下情況下使用此參數:從一個網域向另一個網域匯入資料,並且需要將匯出網域的辨別名稱 (String1) 替換為匯入網域的辨別名稱 (String2)。 |
-v
-j Path
-t PortNumber
• | 指定 LDAP 連接埠號碼。預設 LDAP 連接埠為 389。通用類別目錄連接埠為 3268。 |
-d BaseDN
-r LDAPFilter
• | 為資料匯出建立 LDAP 搜尋篩選器。例如,要匯出所有具有特定姓氏的使用者,您可使用以下篩選器:-r (and(objectClass=User)(sn=Surname))。 |
-p Scope
• | 設定搜尋範圍。搜尋範圍選項有 Base、OneLevel 或 SubTree。 |
-l LDAPAttributeList
• | 設定在匯出查詢結果中傳回的屬性清單。如果省略該參數,則傳回所有屬性。 |
-o LDAPAttributeList
• | 設定在匯出查詢結果中省略的屬性清單。通常在以下情況下使用此參數:從 Active Directory 中匯出物件,然後將其匯入到另一個與 LDAP 相容的目錄中。如果另一個目錄不支援這些屬性,可使用該選項在結果集中省略這些屬性。 |
-g
-m
• | 省略僅應用於 Active Directory 物件的屬性,如 ObjectGUID、objectSID、pwdLastSet 以及 samAccountType 屬性。 |
-n
-k
• | 忽略匯入操作期間的錯誤並繼續處理。以下內容是忽略的錯誤完整清單: • | 物件已經是群組成員 | • | 所匯入的物件沒有其他屬性時發生的物件類別衝突(意味著指定的物件類別不存在) | • | 物件已存在 | • | 強制違規 | • | 屬性或值已存在 | • | 無此物件 |
|
-a UserDistinguishedName Password
• | 將命令設定為使用提供的 UserDistinguishedName 和 Password 來執行。預設情況下,會使用目前登入到網路上的使用者憑證執行命令。 |
-b UserName Domain Password
• | 將命令設定為使用提供的 UserName 網域密碼來執行。預設情況下,會使用目前登入到網路上的使用者的憑證執行命令。 |
-?
註解
在建立用於 Ldifde 命令的匯入檔案時,可使用 changeType 值來定義匯入檔案包含的更改類型。您可以使用以下 changeType 值:
Add | 指定新內容包含在匯入檔案中。 |
modify | 指定已在匯入檔案中修改現有內容。 |
delete | 指定已在匯入檔案中刪除內容。 |
以下內容是使用 add 值的 LDIF 匯入檔案格式範例。
DN: CN=SampleUser,DC=DomainName
changetype: add
CN: SampleUser
description: DescriptionOfFile
objectClass: User
sAMAccountName: SampleUser
範例
若要只擷取傳回物件的辨別名稱、一般名稱、姓名以及電話號碼,請輸入:
-l DistinguishedName, CN, GivenName, SN, Telephone
若要省略物件 GUID,請輸入:
-o whenCreated, whenChanged, objectGUID
格式說明
斜體 | 使用者必須提供的資訊 |
粗體 | 使用者必須完全按顯示內容準確輸入的元素 |
省略號 (...) | 可以在命令行中多次重複使用的參數 |
中括弧內 ([]) | 可選項 |
大括弧內 ({}) 用豎線 (|) 分隔的選項。例如:{even|odd} | 選項集,使用者只能從其中選擇一個 |
Courier 字體 | 代碼或程式輸出 |
其他相關資源
如需更多詳細資訊,請參閱下列資源。