Pages

Subscribe:

Ads 468x60px

Labels

2013年10月23日 星期三

11 個管理 Active Directory 的基本工具

作者:Laura E. Hunte…    厚朴教育来源:T.N    点击数:5338    更新时间:2009-3-13
摘要:
  • 在命令列建立物件
  •  Active Directory 內執行大量作業
  • Active Directory 的更新及維護

如果您曾經處理一份列出從下週起新進公司的 200 名新員工的 Excel 試算表,或使用者帳戶因為服務台人員輸入錯誤而設定不正確,
或者,您只是想要在除了每次開啟 [使用者及電腦之外有更簡單的 Active Directory® 管理方式,您可以利用一些免費的管理工具來幫助您。有些工具直接內建於 Windows® OS,有些隨附於 Resource Kit  Windows 支援工具中,有些則是免費的協力廠商工具。這些方便的工具是什麼?可從何處取得它們?現在就讓我們來了解一下。
我將先從 Windows Server® 2003 的內建命令列工具開始,這些工具可讓您建立、刪除、修改及搜尋 Active Directory 中的物件。

CSVDE
所謂的 CSVDE  Comma-Separated Values Data Exchange 工具,它可讓您使用 CSV 來源檔案,將新物件匯入 Active Directory 中;它也可以讓您將現有的物件匯出至 CSV 檔。CSVDE 不能用來修改現有的物件;當您在匯入模式下使用此工具時,您只能建立全新物件。
 CSVDE 匯出現有物件的清單非常簡單。以下示範如何將 Active Directory 物件匯出至 ad.csv 檔:
csvde –f ad.csv
–f 參數指出輸出檔名稱跟隨在後。但您必須知道一件事實,根據您的環境而定,此基本語法可能會產生使用不便的大型輸出檔。為了限制工具只在特定組織單位 (OU) 內匯出物件,您可以修改陳述式如下:
csvde –f UsersOU.csv –d ou=Users,dc=contoso,dc=com
現在我們進一步假設您只要匯出使用者物件至 CSV 檔。在此情形下,您可以新增 –r 參數,它可讓您指定輕量型目錄存取協定 (LDAP)篩選器來進行搜尋,以及指定 –l 參數,它可限制匯出的屬性數目 (請注意,以下全部在同一行)
csvde –f UsersOnly.csv –d ou=Users,dc=contoso,dc=com –r
    "(&(objectcategory=person)(objectclass=user))" –l
    DN,objectClass,description
–i 參數可讓您將物件從來源 CSV 檔匯入 Active Directory 中。不過,使用 CSVDE 建立使用者物件有一項重要限制:您不能在其中設定使用者密碼。因此,我會避免使用 CSVDE 來建立使用者物件。

LDIFDE
Active Directory 提供大量使用者作業的第二個內建工具,叫做 LDIFDE,它的功能比 CSVDE 更強,且彈性更大。除了建立新物件之外,LDIFDE 也可以修改及刪除現有的物件,甚至延伸 Active Directory 架構。LDIFDE 彈性的交換條件是必要的輸入檔會使用比 CSV 檔更複雜的格式,這個輸入檔稱為 LDIF 檔,其副檔名為 .ldf (您也可以很輕鬆地設定使用者密碼,但這點稍後再探討)
我們先從簡單的範例開始,將某個 OU 內的使用者匯出至 LDF  (請注意,以下全部在同一行)
ldifde -f users.ldf -s DC1.contoso.com -d "ou=UsersOU,dc=contoso,dc=com"
       –r "(&(objectcategory=person)(objectclass=user))"
就像大部分命令列工具一樣,您可以執行 LDIFDE /? 參數來找到 LDIFDE 參數的完整說明。[ 1] 說明我在此處使用的參數 (請注意,CSVDE  LDIFDE 命令的參數其實是一樣的)
 Figure 1 LDIFDE 參數

參數
說明
-d
指定 LDIFDE 應該在作業中連接的 LDAP 路徑。
-f
在此案例中,指出用來輸出匯出結果的檔案名稱。
-r
指定用於匯出的 LDAP 過濾器。
-s
指定為了執行此作業而連接的網域控制站 (DC);如果您省略它,LDIFDE 將連接到本機 DC (或已驗證您的 DC,如果您是從工作站執行此工具的話)


LDIFDE 的真正功能在於建立及處理物件。不過,在這麼做之前,您必須先建立輸入檔。以下建立兩個新的使用者帳戶,叫做 afuller  rking;若要建立輸入檔,請在 [記事本] (或您愛用的純文字編輯器輸入文字並將它另存為 NewUsers.ldf
dn: CN=afuller, OU=UsersOU, DC=contoso, DC=com
changetype: add
cn: afuller
objectClass: user
samAccountName: afuller

dn: CN=rking, OU=UsersOU, DC=contoso, DC=com
changetype: add
cn: rking
objectClass: user
samAccountName: rking
建立該檔案之後,請執行下列命令:
ldifde –i –f NewUsers.ldf –s DC1.contoso.com
這裡唯一的新參數是 -i,您大概猜得到,它表示這是匯入作業而不是匯出。
在修改或刪除現有的物件時,LDIFDE 命令的語法不變;不過,您可以修改 LDF 檔的內容。若要變更使用者帳戶的說明欄位,請建立一個叫做 ModifyUsers.ldf 的文字檔,如 [ 2] 所示。
 2 ModifyUsers LDF  (按影像可放大)
您可以執行與之前一樣的 LDIFDE 命令語法並在 -f 參數後面指定新的 LDF 檔名,來匯入變更。刪除物件的 LDF 格式更簡單;若要刪除您處理的使用者,請建立一個叫做 DeleteUsers.ldf 的檔案,並輸入下列命令:
dn: CN=afuller OU=UsersOU, DC=contoso, DC=com
changetype: delete

dn: CN=rking, OU=UsersOU, DC=contoso, DC=com
changetype: delete
請注意,LDIFDE 能夠設定使用者密碼,這點與 CSVDE 不同。不過,在您可以設定使用者帳戶的 unicodePWD 屬性之前,您必須先在網域控制站上設定安全通訊端層/傳輸層安全性 (SSL/TLS) 加密。
不僅如此,LDIFDE 還可以建立及修改 Active Directory 物件的類型,而不只是使用者帳戶。例如,下列 LDF 檔將在 contoso.com樹系的架構中建立一個自訂架構延伸,叫做 EmployeeID-example
dn: cn=EmployeeID-example,cn=Schema,
cn=Configuration,dc=contoso,dc=com
changetype: add
adminDisplayName: EmployeeID-Example
attributeID: 1.2.3.4.5.6.6.6.7
attributeSyntax: 2.5.5.6
cn: Employee-ID
instanceType: 4
isSingleValued: True
lDAPDisplayName: employeeID-example
因為 LDIFDE 檔使用業界標準 LDAP 檔案格式,所以,需要修改 Active Directory 架構的協力廠商應用程式通常會提供 LDF 檔,當您在生產環境中套用這些變更之前,可使用 LDF 檔來檢查及核准變更。
除了大量匯入及匯出作業的工具之外,Windows Server 2003 也包括內建工具組,讓您建立、刪除及修改各種 Active Directory 物件,以及對符合特定準則的物件執行查詢 (請注意,Windows 2000 Active Directory 不支援 dsadddsrmdsget  dsquery 等工具)

Dsadd
Dsadd 是用於特定目錄磁碟分割中建立 Active Directory 物件類別的執行個體。這些類別包括使用者、電腦、連絡人、群組、組織單位和配額。Dsadd 會使用由下列各項組成的一般語法:
dsadd attributes
請注意,您建立的每一個物件類型都會使用一組特定的參數,這些參數要對應該類型可用的屬性。此命令會建立填入了各種屬性的單一使用者物件 (請注意,以下全部在同一行)
dsadd user cn=afuller,ou=IT,dc=contoso,dc=com
–samID afuller –fn Andrew –ln Fuller –pwd *
-memberOf cn=IT,ou=Groups,dc=contoso,dc=com "cn=Help Desk,ou=Groups,
dc=contoso,dc=com"
–desc "Marketing Director"
–memberOf 參數需要使用者要新增至的每一個群組的完整分辨名稱 (DN);如果您想要將使用者新增至多個群組,可新增以空格隔開的多個 DN
如果有任何元素包含空格,例如 Help Desk 群組的 DN,則需要以雙引號括住它。如果有元素包含反斜線,例如一個叫做 IT\EMEA  OU,則必須輸入反斜線兩次:IT\\EMEA (這些需求適用於所有 ds* 工具)
當您使用 -pwd * 參數時,會提示您在命令列輸入使用者的密碼。您可以在命令本身指定密碼 (-pwd P@ssword1),但這樣會以純文字將密碼顯示在螢幕上,或您內含該命令的文字檔或指令檔中。
同樣地,您可以使用下列兩個命令建立群組物件和 OU
dsadd computer cn=WKS1,ou=Workstations,dc=contoso,dc=com
dsadd ou "ou=Training OU,dc=contoso,dc=com"

Dsmod
Dsmod 是用來修改現有的物件,其使用方式十分類似 dsadd,但視您要修改的物件類型而定,可能會使用不同的子功能表和語法。下列 dsmod 陳述式會變更使用者的密碼並修改其帳戶,因此在下次登入時會提示該使用者變更為新密碼:
dsmod user "cn=afuller,ou=IT,dc=contoso,dc=com" –pwd P@ssw0rd1
    –mustchpwd yes
若要了解這些參數的相似程度,請參考您設定了相同屬性來建立此使用者時所用的 dsadd 語法:
dsadd user "cn=afuller,ou=IT,dc=contoso,dc=com" –pwd P@ssw0rd1
    –mustchpwd yes
顯而易見,如果您知道要在 dsadd 中建立物件的參數,可在 dsmod 中使用那些相同的參數來修改使用者。

Dsrm
 dsadd 相反的是 dsrm;您可以想像得到,此工具可讓您從命令列刪除物件。基本 dsrm 語法非常直接了當:只要輸入 dsrm,後面跟著您要刪除的物件的分辨名稱,如下所示:
dsrm cn=WKS1,ou=Workstations,dc=contoso,dc=com
根據預設,dsrm 會提示「您確定要刪除這個物件嗎?」輸入 Y,然後按 Enter 鍵。您可以使用 –noprompt 參數而不顯示此提示,但顯然這麼做您就沒有機會在刪除之前確認是否已選取正確物件。如果您要刪除容器物件,亦即可能在其中包含其他物件的組織單位,則另有兩個參數會有幫助。下列命令會刪除 TrainingOU 組織單位及其中包含的所有物件:
dsrm ou=TrainingOU,dc=contoso,dc=com –subtree
這個命令會刪除包含在 TrainingOU 內的所有子物件,但會將組織單位物件本身留在原地:
dsrm ou=TrainingOU,dc=contoso,dc=com –subtree
    –exclude

Dsmove
若要在 Active Directory 中移動或重新命名物件,您可以使用 dsmove 工具,但請注意,您只能使用它在單一網域內移動物件。若要在網域或樹系之間移轉物件,請使用 Active Directory Migration Tool (ADMT),您可從 Microsoft 網站免費下載它。Dsmove 會仰賴兩個參數,它們可分開使用或合併使用。此命令會給予 Steve Conn 帳戶新的姓氏:
dsmove "cn=Conn, Steve,ou=IT,dc=contoso,dc=com"
    –newname "Steve Conn"
此命令會將 IT OU 中的 Steve 帳戶移到 OU 中:
dsmove "cn=Conn, Steve,ou=IT,dc=contoso,dc=com" –newparent
    ou=Training,dc=contoso,dc=com
您可以同時指定兩個參數,將 rename  move 合併成單一作業,如下所示:
dsmove "cn=Conn, Steve,ou=IT,dc=contoso,dc=com" –newname
    "Steve Conn" –newparent ou=Training,dc=contoso,dc=com

Dsget  Dsquery
ds* 命令列工具組也包括用來查詢 Active Directory 的兩個工具,它們是為了取得資訊而非建立或修改物件。
Dsget 使用物件的 DN 作為輸入,並提供您所指定之屬性的值。Dsget 使用與 dsadd  dsmod 相同的子功能表:usercomputercontactgroupou  quota
若要取得使用者的 SAM 帳戶名稱和安全性描述元 (SID),請輸入下列命令 (請注意,以下全部在同一行)
dsget user cn=afuller,ou=IT,dc=contoso,dc=com
    –samAccountName –sid
您將得到如 [ 3] 所示的輸出。
 3 執行 dsget (按影像可放大)
Dsquery 會傳回符合您指定的準則的 Active Directory 物件清單。不論您使用哪一個子功能表,您都可以指定下列參數:
dsquery -s -o
對於 ObjectTypedsquery 可使用下列子功能表,它們各有自己的語法:computercontactsubnetgroupousiteserver (請注意,伺服器子功能表會擷取網域控制站的相關資訊,而非環境中的任何成員伺服器)userquota  partition。如果其中一個查詢類型無法滿足要求,您可以使用 * 子功能表,它可讓您輸入任意形式的 LDAP 查詢。
StartNode  Active Directory 樹狀目錄中指定要開始搜尋的位置。您可以使用特定 DN,例如 ou=IT,dc=contoso,dc=com,或下列其中一個捷徑指定元:domainroot  forestroot,前者從特定網域根目錄開始,後者從樹系根網域的根目錄開始,並利用通用類別目錄伺服器執行搜尋。
最後,[搜尋範圍選項會指定 dsquery 應如何搜尋 Active Directory 樹狀目錄。樹狀子目錄 (預設值會查詢指定的 StartNode 及其所有子物件,onelevel 只查詢 StartNode 當前的子系,base 僅查詢 StartNode 物件。
若要進一步了解搜尋範圍,請考慮一個包含使用者物件的 OU 和其本身包含其他物件的子 OU。使用樹狀子目錄範圍將查詢 OU、其包含的所有使用者物件及子 OU 及其內容。onelevel 範圍只會查詢 OU 包含的使用者,而不查詢子 OU 或其內容。base 查詢只會搜尋OU 本身而不查詢其包含的任何物件。
最後,您可以使用 Output Format 來控制如何將 dsquery 的結果格式化。根據預設,dsquery 會傳回符合查詢的任何物件之分辨名稱,如下所示:
"cn=afuller,ou=Training,dc=contoso,dc=com"
"cn=rking,ou=ITTraining,ou=Training,dc=contoso,dc=com"
若要查詢 IT OU 內包含的所有使用者物件及任何子 OU,請使用下列命令:
dsquery user ou=IT,dc=contoso,dc=com
您可以新增其他參數來進一步限定此查詢,例如 -disabled,它只會傳回已停用的使用者帳戶;-inactive x,,它只會傳回在過去 x 週以來未登入的使用者;或 -stalepwd x,它只會傳回在 x 天以上未變更其密碼的使用者。
視目錄中的物件數而定,您在執行查詢時可能需要指定 -limit x 參數。根據預設,dsquery 會傳回最多 100 個符合查詢細節的物件;您可指定更大的數目,例如 -limit 500,或使用 -limit 0 指示 dsquery 傳回所有符合的物件。
您可以使用其他子功能表,也對其他物件類型執行有用的查詢。請看下列查詢,它會傳回 Active Directory 站台及服務所定義的每一個子網路,其位於 10.1.x.x 位址空間:
dsquery subnet –name 10.1.*
或使用下列命令以傳回位於 Corp 站台中的每一個子網路:
dsquery subnet –site Corp
使用另一個子功能表,您可以快速判斷樹系中有多少個網域控制站是設定為通用類別目錄伺服器:
dsquery server –forest –isgc
您也可以使用此語法幫助您判斷,網域中的哪一個網域控制站管理網域主控站 (PDC) Emulator Flexible Single Master Operations (FSMO) 角色:
dsquery server –hasfsmo pdc
就像其他包含子功能表的 ds* 命令一樣,您可以到命令提示字元中輸入 dsquery user /?dsquery computer /?dsquery subnet /? ...等等,來檢視特定 dsquery 子功能表內可用的所有參數。
另一個訣竅是使用 | 字元 (英數鍵盤上的 Shift + 反斜線 dsquery 的輸出 pipe 到另一個工具,例如 dsmod。例如,假設貴公司已將 Training 部門重新命名為 Internal Development,現在您必須將舊部門名稱的每一個相關使用者的說明欄位更新為新名稱。在單一命令行上,您可以查詢有 Training 說明欄位的使用者物件,然後大量修改該說明欄位,如下所示:
dsquery user –description "Training" | dsmod
    -description "Internal Development"

協力廠商的好康工具
由於 Active Directory 是依據 LDAP 標準,因此,您可以使用可表示 LDAP 的任何工具來查詢及修改它。許多協力廠商發行付費工具協助您管理 Active Directory,但有時候您會發現社群已有的免費工具。例如由 Directory Services MVP Joe Richards 所建立的集合,可從 joeware.net/freetools 下載。其中有數個工具,分別提供許多不同的功能。有三個是我常用的,即 adfindadmod  oldcmp

Adfind  Admod
Adfind  admod 類似 dsquery  dsmodadfind  Active Directory 的命令列查詢工具,admod 可建立、刪除或修改一或多個 Active Directory 物件。
與具有多個子功能表和視物件類型而定的不同參數的 ds* 工具不同,不管您要執行的查詢或修改類型是什麼,adfind  admod 均具有一致的語法。adfind 的基本語法如下:
adfind –b -s -f
    attributesDesired

因此,對於網域內所有電腦物件的 DN 和說明的查詢如下:
adfind –b dc=contoso,dc=com –s subtree –f (objectclass=computer) dn
    description
對於所有使用者物件的查詢如下:
adfind –b dc=contoso,dc=com –s subtree –f "(&(objectcategory=person)
    (objectclass=user))" dn description
請注意,除了 LDAP 查詢的內容之外,其餘語法不變。
當您使用 adfind 時,會發現一些捷徑運算子,它們可為您節省一些打字的功夫。例如,-default 參數可取代先前範例中的 -b dc=contoso,dc=com,並搜尋整個網域;-gc 會搜尋廢棄項目收集 (GC) 並傳回 Active Directory 樹系中的所有使用者。您也可以使用 -rb 參數設定搜尋的相對基底;如果您想要在 phl.east.us.contoso.com 網域中搜尋 Training OU,您可以直接指定 –default –rb ou=Training 而不要指定 –b ou=Training, dc=phl,dc=east,dc=us,dc=contoso,dc=com,這樣可為自己節省不少功夫。.
Adfind 也可以執行一些在命令列不好管理的進階搜尋功能,包括 [ 4] 所顯示的那些功能。
 Figure 4 Adfind 參數

參數
說明
-showdel
查詢 Deleted Objects 容器中的標記物件。
-bit
查詢位元運算子,例如 userAccountControl 屬性。
-asq
執行屬性範圍的查詢。此功能 ( dsquery 中無法複製可擷取特定物件的屬性,然後對它執行查詢。
-dsq
 adfind 查詢的輸出 pipe  dsmod 或其他的 ds* 工具之一。


使用 –asq 參數的範例為「顯示屬於 HelpDesk 成員的群組成員資格」,如下所示:
adfind –default –rb cn=HelpDesk,ou=IT –asq member memberOf
Admod 顧名思義,是用來修改 Active Directory 內的物件。和 adfind 一樣,並沒有什麼特殊子功能表的特定語法需要記住,不論您使用的物件類型是什麼,admod 都使用相同語法。您也可以新增適當的參數 (例如 -add-rm-move-undel),使用 admod 來新增、移動、重新命名、刪除、甚至取消刪除物件。就像 dsquery  dsmod 一樣,您也可以使用 | 字元將 adfind 查詢的結果 pipe  admod
請注意,使用 admod 執行取消刪除作業只會執行重新引發標記的作業,其中已移除大部分物件屬性。若要完全還原物件及其所有屬性,您還是需要執行物件的授權還原。

Oldcmp
還有另一個 joeware 工具,我認為是自動化工具組不可或缺的一部分:oldcmp,它會掃描 Active Directory 資料庫中在指定的週數內尚未使用的電腦帳戶,並且可執行下列動作:
  • 建立帳戶的報告,而不對它們採取任何動作
  • 停用未使用的電腦帳戶
  • 將電腦帳戶移到您指定的不同 OU
  • 立刻刪除電腦帳戶
請注意,由於 oldcmp 可能對目錄造成嚴重破壞,因此,它有一些內建的安全功能。它不會刪除任何尚未停用的帳戶 (除非有手動指定「我很肯定」的命令列參數)。除非有特別指定「我很肯定」的參數,否則它不會一次修改超過 10 個物件,而且它絕對不會對網域控制站的電腦帳戶做任何動作。
不管該工具目前令人誤會的名稱,Joe 已更新 oldcmp,使它對已有某一段特定時間未使用的使用者帳戶執行類似功能。
對於小型 Active Directory 環境或您一次只處理一兩個新增或變更的環境,像 Active Directory 使用者及電腦之類的 GUI 工具,已足夠應付每日例行管理工作。但如果您每天要新增及修改大量物件,或您希望管理工作有更有效率的解決方案,則移到命令行可以大幅加快建立、修改及刪除 Active Directory 物件的程序。誠如您所見的,免費提供的一些彈性大功能強的工具,已直接內建於 Windows 中,並且可從 Active Directory 社群的成員下載。任何這些工具都能夠大幅提高 Active Directory 系統管理者的生產力,甚至成為日常生活中不可或缺的工具。
厚朴教育录入:张俊    责任编辑:张俊

沒有留言:

張貼留言