要移動或重命名 Active Directory 中的對象,請使用 dsmove 工具,但請注意您只應使用該工具在單一域中移動對象。要在域和林之間遷移對象,請使用 Active Directory 遷移工具 (ADMT),可從 Microsoft 網站免費下載。Dsmove 依賴于兩個開關,它們可以單獨使用,也可以結合在一起使用。以下命令將為 Steve Conn 的帳戶指定新姓氏:
dsmove "cn=Conn, Steve,ou=IT,dc=contoso,dc=com" –newname "Steve Conn"
以下命令將 Steve 的帳戶從 IT OU 移動到 Training OU:
dsmove "cn=Conn, Steve,ou=IT,dc=contoso,dc=com" –newparent ou=Training,dc=contoso,dc=com
您可以通過同時指定這兩個開關,將重命名和移動合并為一個操作,如下所示:
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 相同的子菜單 — user、computer、contact、group、ou 和 quota.
要獲得用戶帳戶的 SAM 帳戶名和安全標識符 (SID),請鍵入以下命令(請注意以下所有內容位于一行):
dsget user cn=afuller,ou=IT,dc=contoso,dc=com –samAccountName –sid
您將會得到如圖 2所示的輸出。
圖 2 運行 dsget
Dsquery 將返回一個符合您指定條件的 Active Directory 對象的列表。無論您使用的是哪個子菜單,都可以指定以下參數:
dsquery <ObjectType> <StartNode> -s <Search Scope> -o <OutputFormat>
對于 ObjectType,dsquery 可以使用以下子菜單,每個子菜單都具有自己的語法:computer、contact、subnet、group、ou、site、server(請注意,服務器子菜單檢索有關域控制器的信息,而不是環境中的任一成員服務器)、user、quota 和 partition.如果其中一個查詢類型不符合需要,您可以使用 * 子菜單,這樣您可以輸入任意格式的 LDAP 查詢。
StartNode 指定搜索在 Active Directory 樹中的開始位置。您可以使用特定的 DN,如 ou=IT、dc=contoso、dc=com 或下列其中一個快捷說明符:domainroot,從特定域的根目錄開始;forestroot,從使用全局編錄服務器執行搜索的林根域的根目錄開始。
最后,“搜索范圍”選項指定 dsquery 搜索 Active Directory 樹的方式。Subtree(默認方式)查詢指定的 StartNode 及其所有子對象;onelevel 僅查詢 StartNode 的直接子項;base 僅查詢 StartNode 對象。
為了更好地理解搜索范圍,假定有一個 OU,其中包含用戶對象和一個子 OU,該子 OU 自身又包含其他對象。使用 subtree 范圍將查詢該 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) 模擬器靈活單主機操作 (FSMO) 角色:
dsquery server –hasfsmo pdc
與其他包含子菜單的 ds* 命令一樣,您可以轉到命令提示符并鍵入 dsquery user /?、dsquery computer /?、dsquery subnet /? 等查看特定 dsquery 子菜單中可用的所有開關。
另一個靈活的技巧是使用管道字符(在美式鍵盤上按下 shift 的同時按反斜杠即可)將 dsquery 的輸出通過管道傳送到其他工具(如 dsmod)中。例如,假設您的公司已將 Training 部門重命名為 Internal Development,現在您必須將每位相關用戶的說明字段從舊部門名稱更改為新名稱。在單一命令行上,您可以查詢具有 Training 的說明字段的用戶對象,然后批量修改該說明字段,如下所示:
dsquery user –description "Training" | dsmod -description "Internal Development"