天天看點

Windows AD中批量修改使用者屬性

Windows AD是之前其他人建立的,但是初始建立的一些使用者很多資訊沒有健全,是以之後有些需要的時候就需要補全資訊,而一旦使用者量上來之後,往往這個事情是令人痛苦的,但這還是必須要做的,畢竟其他的系統以此為基礎。好吧,由于三方系統的要求,現在需要往Windows AD中添加EmployeeID字段,将大概1200的EmployeeID添加到AD使用者資訊中去,做完之後,記下操作流程,以免類似的杯具重演。

預設建好活動目錄後,AD使用者是沒有employeeID字段的,該字段是在部署Exchange時做了擴充schema之後産生的,是以如果你沒有EmployeeID字段,而又需要使用員工ID的話,隻需要下載下傳Exchange安裝鏡像,并使用其中的腳本擴充schema即可。好吧,就不多說廢話了,開始幹活了。

一、導出使用者資料

要批量修改使用者的資訊,首先要取得需要修改資訊的使用者,然後才能對使用者的某些字段進行修改。要取得AD中的使用者,這裡使用csvde指令(當然你也可以使用Get-ADUser指令,隻是指令的用法有所不同罷了,隻要能取得使用者資訊即可)

csvde -d ou=*,dc=*,dc=* -r "(objectclass=user)" -l DN,cn -f c:\test.csv

這條指令取指定OU下面的使用者的DN和cn資訊,也就是使用者在AD中的起始資訊和使用者名,然後将結果導出到C槽下的test.txt檔案中。

以管理者身份打開指令提示符,然後在指令提示符視窗中輸入該指令,回車,即可将所需的使用者資訊導出到文本檔案中,如下圖所示。

Windows AD中批量修改使用者屬性

取出的資訊應該是類似下面的格式,

DN,displayName,sAMAccountName

"CN=張三,OU=students,OU=***,DC=***,DC=***,DC=***",張三,zhangsan

"CN=李四,OU=students,OU=***,DC=***,DC=***,DC=***",李四,lisi

其實後面的displayName是可以不取得,因為我要添加EmployeeID資訊,但是員工表的資訊和該AD導出的資訊表順序是不一緻的,是以我需要做一個比對,就需要使用員工的姓名進行Excel的比對。

二、處理取得的資訊

這步操作看起來是毫無技術含量,可是最花費時間的就是這一步,試想如果資訊都有了,指令行一行代碼下去,批處理也就是分分鐘的事兒,但是資訊的雜亂肯定會使你的指令執行出錯,另外,如果資訊錯誤那麼你批量導入也就沒有意義,是以說資訊的操作也很重要。

首先,要修改使用者資訊,無疑要使用dsmod指令,當然我也百度了以下,powershell中也有指令處理AD的資訊,但是執行修改什麼的還是要借助第三方工具或者控件,找尋費時不說,指令的文檔還不權威,是以就死了這條心,使用dsmod這現成的算了。

我需要的最終的使用者資訊是DN,cn,employeeID等,而在第一步中我已經拿到了前兩個字段的資訊,第二張表是相關部門送出過來的,包含employeeID和姓名的資訊,這樣的話兩張表中的姓名資訊是一緻的,可以使用excel中的函數進行比對,這樣就能夠把第二張表的employeeID比對到第一張表中去,就得到了最終的資訊。關于excel的使用我就不多介紹了,不會問度娘就好了。如果實在不行,作為IT人員,可以将這兩張表都導入到資料庫中,做一個連接配接操作,也可以得到想要的結果,不過這個就比excel麻煩的多了。

最終需要的資訊格式如下:

DN,empid,displayname

"CN=張三,OU=students,OU=***,DC=***,DC=***,DC=***",0001,張三

"CN=李四,OU=students,OU=***,DC=***,DC=***,DC=***",0002,李四

但是實際上需要的資訊,隻有前兩列,是以可以将第三列删除,畢竟隻是比對資訊用的

DN,empid

"CN=張三,OU=students,OU=***,DC=***,DC=***,DC=***",0001

"CN=李四,OU=students,OU=***,DC=***,DC=***,DC=***",0002

OK,至此資訊的擷取就完成了。

三、指令行執行

指令行的話,我是參考了一些網上的文章的,如果你直接寫dsmod user "CN=張三,OU=students,OU=***,DC=***,DC=***,DC=***" -empid 0001也可以,但是如果是1200條就有點困難了,不過網上總有有想法的網友,比如下面這篇文章的作者就想辦法使用excel簡化這個操作,通過csv檔案的間隔符,将excel中的資料變為dsmod,,user,,"CN=張三,OU=students,OU=***,DC=***,DC=***,DC=***",,-empid,,0001等這麼多列,然後再用批量替換将,,換為空格,然後直接将csv轉換為txt就生成了一條一條的dsmod指令,然後做成一個bat檔案,執行就可以了。

http://bbs.51cto.com/thread-967452-1.html

這麼做也可以,但是這種做法的可替代性不是很強,如果下次再出現這樣的問題,還是需要再生成1200條dsmod指令,是以我又想讓計算機自己執行生成dsmod指令的方法,最後在另外一篇文章中看到,http://blog.chinaunix.net/uid-8303972-id-2033118.html,這篇文章的作者基本上和我的情況很相似,然後方法也是我想要的,但是一開始不太明白他的for語句,是以又專門去查了一下,這裡補充一下for語句的說明,詳見:http://blog.sina.com.cn/s/blog_62defbef0101outj.html

然後心裡就有譜兒了,開始修改自己的腳本了

資料為儲存為txt檔案,其中内容類似如下格式:

a  b

"CN=張三,OU=students,OU=***,DC=***,DC=***,DC=***"  0001

"CN=李四,OU=students,OU=***,DC=***,DC=***,DC=***"  0002

然後指令行為:

FOR /F "skip=1 eol=; tokens=1,2,* delims= " %a in (C:\staff.txt) do dsmod user %a -empid %b

Windows AD中批量修改使用者屬性

狠敲Enter鍵,指令行瞬間滑下:

Windows AD中批量修改使用者屬性

好吧,指令執行成功,happy.

最後,到AD中檢視一下,員工ID屬于擴充字段,要在AD上選擇檢視,進階功能,然後點選使用者屬性,在屬性編輯器中可以找到,成功找到,OK,萬事大吉,Over。

Windows AD中批量修改使用者屬性

繼續閱讀