Active Directory 批量導入和導出分步指南

Active Directory 批量導入和導出分步指南

http://www.microsoft.com/china/technet/prodtechnol/windowsserver2003/technologies/directory/activedirectory/stepbystep/adbulk.mspx

本指南介紹如何聯合運用輕量目錄訪問協議 (LDAP) 數據交換格式 (LDIF) 實用工具及若干使用 Microsoft Visual Basic? Scripting Edition (VBScript) 開發系統編寫的示例程序對 Active Directory? 服務進行批處理管理。

本頁內容

簡介
簡介

概述
概述

使用 VB. 和 ADSI
使用 VBScript 和 ADSI

附錄 — 使用 LDIFDE
附錄 — 使用 LDIFDE

其他資源
其他資源

簡介 逐步式指南

Windows Server 2003 部署分步指南提供了很多常見操作系統配置的實際操作經驗。本指南首先介紹通過以下過程來建立通用網絡結構:安裝 Windows Server 2003;配置 Active Directory;安裝 Windows XP Professional 工作站並最後將此工作站添加到域中。後續分步指南假定您已建立了此通用網絡結構。如果您不想遵循此通用網絡結構,則需要在使用這些指南時進行適當的修改。

通用網絡結構要求完成以下指南。

?

第一部分:將 Windows Server 2003 安裝爲域控制器

?

第二部分:安裝 Windows XP Professional 工作站並將其連接到域上

在配置通用網絡結構後,可以使用任何其他的分步指南。注意,某些分步指南除具備通用網絡結構要求外,可能還需要滿足額外的先決條件。任何額外的要求都將在特定的分步指南中說明。

Microsoft Virtual PC

可以在物理實驗室環境中或通過虛擬化技術(如 Microsoft Virtual PC 2004 或 Microsoft Virtual Server 2005)來實施 Windows Server 2003 部署分步指南。藉助於虛擬機技術,客戶可以同時在一臺物理服務器上運行多個操作系統。Virtual PC 2004 和 Virtual Server 2005 就是爲了在軟件測試和開發、舊版應用程序遷移以及服務器整合方案中提高操作效率而設計的。

Windows Server 2003 部署分步指南假定所有配置都是在物理實驗室環境中完成的,但大多數配置不經修改就可以應用於虛擬環境。

這些分步指南中提供的概念在虛擬環境中的應用不在本文的討論範圍之內。

重要說明

此處作爲例子提到的公司、組織、產品、域名、電子郵件地址、徽標、個人、地點和事件純屬虛構,我們決無意影射,任何人也不應由此臆猜,任何真實的公司、組織、產品、域名、電子郵件地址、徽標、個人、地點或事件。

此通用基礎結構是爲在專用網絡上使用而設計的。此通用基礎結構中使用的虛擬公司名稱和域名系統 (DNS) 名稱並沒有爲在 Internet 上使用而註冊。您不應在公共網絡或 Internet 上使用此名稱。

此通用基礎結構的 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 創建新用戶和刪除用戶。

先決條件

?

第一部分:將 Windows Server 2003 安裝爲域控制器

?

安裝其他域控制器的分步指南

使用 Ldifde.exe 實用工具

LDIF 是關於文件格式的 Internet 草案標準,這種文件格式可用於在符合 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 中顯示的內容相似。

圖 1.  導出目錄數據

圖 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 文件

圖 2. 檢查 LDF 文件

5.

在“記事本”中,修改“Marketing.ldf”中的每個用戶對象條目,使之與圖 3 的內容相似。注意:必須將文件保存爲 .ldf 文件。

圖 3.  修改 LDF 導入文件

圖 3. 修改 LDF 導入文件

6.

關閉“記事本”。在“命令提示符”窗口中,鍵入:

ldifde –i -f marketing.ldf -s hq-con-dc-01

7.

按“Enter”鍵。結果應該與圖 4 中顯示的內容相似。

圖 4.  成功導入 LDF 文件

圖 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.  添加新用戶

圖 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 和 Internet 信息服務也支持腳本。

修改對象

在本示例中,將更改“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","[email protected]" 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

?

將命令設置爲使用提供的用戶可分辨名稱和密碼來運行。默認情況下,使用當前登錄到網絡上的用戶的憑據運行命令。

-b UserName Domain Password

?

將命令設置爲使用提供的用戶名域密碼來運行。默認情況下,使用當前登錄到網絡上的用戶的憑據運行命令。

-?

?

顯示命令菜單。

註釋

在創建用於 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 字體

代碼或程序輸出

返回頁首返回頁首

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章