Я программно создаю тысячи тестовых пользователей из txt-файла, содержащего имя, фамилию, имя пользователя и пароль, используя следующую команду (сохранена как пакетный файл, запускается в cmd, изменена из этот вопрос):
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.
даже если в списке нет ни одного повторяющегося пользователя. Просматривая OU в оснастке MMC для пользователей AD, я вижу, что был создан только первый пользователь, и в этом OU нет других пользователей.
Команда будет работать, когда я попытаюсь запустить ее напрямую (изменение %%i
к %i
при необходимости и используя 2>>Errors.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
Вторичная проблема, из-за которой, казалось бы, случайные пользователи не справлялись с выполнением команды напрямую, оказалась проблемой пользователей с одинаковым 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
Что касается проблемы с пакетным файлом, оказалось, что я работал с неправильной копией файла (отличной от той, которую я скопировал здесь), в которой была опечатка, где samid
и upn
используемый %k
вместо того %%k
. Я не уверен, как это было введено, но исправление опечаток позволит успешно запустить командный файл.
(Если было бы более целесообразно внести это как правку, прокомментируйте, и я изменю это)