一個指令碼解決AD使用者批量操作問題

weixin_34219944發表於2010-08-27

前幾天在群中51CTO的HZ022朋友提出了個關於AD使用者批量更新OU的問題,大家都清楚在AD圖形介面中我們只能一個個增加、移動、刪除使用者,這樣操作有時真的夠煩的,在大批量操作時浪費的時間也很多,有沒有更好的辦法解決我們經常面臨的問題呢?其實我們可以使用簡單的指令碼來實現所需的功能,在這裡我把它延伸為下面幾個問題並進行解答。後面編寫的一個指令碼同樣可以完成下面的操作,大家可以下載下了測試一下哦,如果指令碼在測試時你有更好的方法或發現有錯誤的地方可得知會一下小弟哦。

1.假設一個企業(DC為www.gr.com,以下相同)中有1000個使用者,其中包含了user字元的有100個使用者,它們分部在不同的OU中,如:IT,PM,MRP,ACC等等,現在我們新建了一個OU名稱為Sales,現在如何將這100個使用者從其它的OU中移至Sales這個OU?

解答:

  • dsquery user –name *user* >>c:\user.txt
  • for /f %i in (c:\user.txt) do dsmove %i -newparent ou=Sales,dc=www,dc=gr,dc=com

2.假設一個企業中有1000個使用者,其中有100個使用者屬於Sales組,它們分部在不同的OU中,如:IT,PM,MRP,ACC等等,現在我們新建了一個OU名稱為Sales,現在如何屬於Sales組的這些使用者從其它的OU中移至Sales這個OU?

解答:

  • dsget group "cn=Sales,cn=users,dc=www,dc=gr,dc=com" -members >>c:\user.txt
  • for /f %i in (c:\user.txt) do dsmove %i -newparent ou=Sales,dc=www,dc=gr,dc=com

3.假設一個企業新進100個職員,他們分別分配在IT,PM,MRP,ACC,Sales部門,現在如何批量建立這些使用者並設定他們所在的組和OU?

解答:

  • 首先建立一個c:\userlist.csv,格式如下:
    henGong,ACC,p@ssw0rd
    ChengYuanZhi,IT,p@ssw0rd
    ChengPu,MRP,p@ssw0rd
  • FOR /F "eol=; tokens=1,2,3* delims=, " %a in (c:\userlist.csv) do dsadd user "cn=%a,ou=%b,dc=www,dc=gr,dc=com" -pwd %c -samid %a -upn %a@www.gr.com

4.時間長了,由於職員離職等原因,在AD中被禁用的使用者越來越多,而且他們分部在不同的OU中,如何將這些被禁用的使用者批量的刪除掉呢?

解答:

  • dsquery user -disabled >>c:\user.txt
  • for /f %i in (c:\user.txt) do dsrm -noprompt -c "%i"

 

總結上面幾個問題,我編寫了一個指令碼,運用它我們可以簡單的來實現以上功能。

指令碼如下,大家可以拷貝到記事本中並儲存為cmd格式,你也可以下載我上傳的檔案分別將其字尾改為cmd和csv,其中此指令碼中我所用的測試DCwww.gr.com,請試驗時將指令碼中相應部分更改為你自己的DC。

@echo off
cls
cd\
c:
echo.
echo -------------------------------------------
echo 此指令碼用於更改AD使用者所在的OU及批量建立使用者.
echo -------------------------------------------
echo.
echo 【1】批量更改使用者至新OU
echo 【2】將同一組使用者更改至新OU
echo 【3】批量建立使用者
echo 【4】批量刪除被禁用使用者

echo -------------------------------------------
echo.
set /p select=請在選單中選擇:
if "%select%"=="1" set /p username=請輸入所需查詢使用者(可使用匹配符): &goto A
if "%select%"=="2" set /p groupname=請輸入所需查詢組名: &goto B
if "%select%"=="3" goto D
if "%select%"=="4" goto E

:A
dsquery user -name %username% >>user.txt
echo.
echo ---------------------------
echo 已成功匯出所匹配的使用者資訊。
echo ---------------------------

goto C

:B
dsget group "cn=%groupname%,cn=users,dc=www,dc=gr,dc=com" -members >>user.txt
echo.
echo ----------------------------------
echo 已成功匯出%groupname%組的使用者資訊。
echo ----------------------------------

goto C

:C
echo.
set /p ouname=請輸入使用者所需更新到的OU:
for /f %%i in (user.txt) do dsmove %%i -newparent ou=%ouname%,dc=www,dc=gr,dc=com

echo.
echo ----------------------------------------
echo 已成功更新使用者到 %ouname% OU中,謝謝使用。
echo ----------------------------------------
echo.

goto Z

:D

set /p userpath=請輸入使用者列表檔案路徑(c:\userlist.csv):
FOR /F "eol=; tokens=1,2,3* delims=, " %%a in (%userpath%) do dsadd user "cn=%%a,ou=%%b,dc=www,dc=gr,dc=com" -pwd %%c -samid %%a -upn %%a@www.gr.com

echo.
echo ----------------------------------------------------
echo 已成功建立%userpath%列表中的使用者,謝謝使用。
echo ----------------------------------------------------
echo.

goto Z

:E
set /p select=請確定刪除被禁用使用者嗎?(y/n):

if "%select%"=="y" goto F
if "%select%"=="n" goto Z

:F
dsquery user -disabled >>user.txt
for /f %%i in (user.txt) do dsrm -noprompt -c "%%i"

echo.
echo -------------------------------
echo 已成功刪除被禁用使用者,謝謝使用。
echo -------------------------------
echo.

:Z
del user.txt
pause
echo on

 

以上指令碼歡迎大家指正,謝謝。

 

Alan Luo 標籤: ADDSQUERYDSRMDSMOVEDSGET

相關文章