當沒有具有相同 dn 的現有帳戶時,從批處理文件執行 dsadd 失敗並顯示“指定的帳戶已存在”
我正在使用以下命令(保存為批處理文件,在 cmd 中執行,從這個問題修改)以程式方式從包含名字、姓氏、使用者名和密碼的 txt 文件創建數千個測試使用者:
FOR /F "tokens=1,2,3,4 delims," %%i in (UserList.txt) do (dsadd user "cn=%%j %%i,ou=2013,ou=My50kOU,dc=mydomain,dc=com" -samid %%k -pwd "%%l" -upn %%k@mydomain.com -fn "%%j" -ln "%%i" -display "%%j %%i" -disabled no -mustchpwd no)
UserList.txt 的範例內容
Claverie,Eugenio,Eugenio.Claverie,UX8y30B2TFN%Y?Ig[78Z Baglio,Carl,Carl.Baglio,i=*fqdRyK]#cab/i5j%U Wilda,Irina,Irina.Wilda,{***f)GwK#K3Rd!iE}%D Shadowen,Gale,Gale.Shadowen,xLxP}zUdCF4rpzUkB#uS
但是,對於第一個使用者之後的每個使用者,我都會收到如下錯誤:
dsadd failed:cn=Carl Baglio,ou=My50kOU,dc=mydomain,dc=com:The specified account already exists.
即使列表中沒有一個重複的使用者。查看 AD 使用者的 MMC 管理單元中的 OU,我看到只創建了第一個使用者,而 OU 中沒有其他使用者。
當我嘗試直接執行該命令時該命令將起作用(根據需要更改
%%i
為%i
並用於2>>Errors.txt
將我的錯誤路由到 txt 文件。)命令直接在 CMD 中執行:
FOR /F "tokens=1,2,3,4 delims," %i in (UserList.txt) do (dsadd user="cn%j %i,ou=My50kOU,dc=mydomain,dc=com" -samid %k -pwd "%l" -upn %k@mydomain.com -fn "%j" -ln "%i" -display "%j %i" -disabled no -mustchpwd no) 2>>Errors.txt
能夠通過點擊批處理文件而不是手動執行它來執行它會很好。
編輯: 當我今天早上執行批處理文件時,我注意到第一個使用者每次也都會出錯,儘管使用者已成功創建:
Unable to update the password. The value provided for the new password does not meet the length, complexity, or history requirements of the domain
當我直接執行命令而不是執行批處理文件時會成功的密碼會發生這種情況。所有後續使用者都有“指定帳戶已存在”錯誤。
我查了這個錯誤,發現了一個類似問題的老問題。不幸的是,解決方案是“使用 Powershell”,這不是一個選項,因為AD 模組在我必須使用的 Windows 版本上不可用(Server 2008 x64)
編輯 2
直接執行命令時看似隨機的使用者失敗的次要問題原來是不同 OU 中具有相同 samAccountName 的使用者的問題,這是不允許的。
編輯 3
更改
do
為do echo
將命令寫入新的批處理文件生成的命令如下:dsaddUser "cn=Carroll Colhoun,ou=Testou,dc=mydomain,dc=com" -samid k@testdom.com -fn "Carroll" -ln "Colhoun" -display "Carroll Colhoun" -disabled no -mustchpwd no
與
do echo
直接執行相同的 dsadd 相比,它會生成:dsaddUser "cn=Carroll Colhoun,ou=Testou,dc=mydomain,dc=com" -samid Carroll.Colhoun -pwd "xLxP}zUdCF4rpzUkB#uS" -upn Carroll.Colhoun@testdom.com -fn "Carroll" -ln "Colhoun" -display "Carroll Colhoun" -disabled no -mustchpwd no
因此,以某種方式將命令作為批處理文件執行會省略整個部分
Carroll.Colhoun -pwd "xLxP}zUdCF4rpzUkB#uS" -upn Carroll.Colhoun
,並將其替換為k
對於批處理文件問題,事實證明我正在使用錯誤的文件副本(與我在此處複製粘貼的不同)進行工作,該副本在 where
samid
和upn
使用%k
而不是%%k
. 我不確定它是如何引入的,但更正拼寫錯誤將使批處理文件成功執行。(如果將其作為編輯更合適,請發表評論,我會更改它)