Estou programaticamente criando milhares de usuários de teste a partir de um arquivo txt contendo Nome, Sobrenome, Nome de Usuário e Senha usando o seguinte comando (salvo como um arquivo em lotes, executado em cmd, modificado de esta pergunta ) :
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 %%[email protected] -fn "%%j" -ln "%%i" -display "%%j %%i" -disabled no -mustchpwd no)
Exemplo de conteúdo de 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
No entanto, para todos os usuários após o primeiro usuário, recebo um erro como o seguinte:
dsadd failed:cn=Carl Baglio,ou=My50kOU,dc=mydomain,dc=com:The specified account already exists.
mesmo quando não houver um único usuário duplicado na lista. Visualizando a UO no snap-in do MMC para usuários do AD, vejo apenas o primeiro usuário criado e nenhum outro usuário presente na UO.
O comando funcionará quando eu tentar executá-lo diretamente (alterando %%i
para %i
conforme apropriado e usando 2>>Errors.txt
para rotear meus erros para um arquivo txt.)
Comando executado diretamente no 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 %[email protected] -fn "%j" -ln "%i" -display "%j %i" -disabled no -mustchpwd no) 2>>Errors.txt
Seria bom poder executar isso apenas clicando no arquivo em lote, em vez de executá-lo manualmente.
Editar:
Quando eu executei o arquivo em lote esta manhã, percebi que o primeiro usuário também apresenta um erro toda vez, embora o usuário tenha sido criado com sucesso:
Unable to update the password. The value provided for the new password does not meet the length, complexity, or history requirements of the domain
Isso ocorre para senhas que serão bem-sucedidas quando eu executar o comando diretamente, em vez de executar o arquivo em lotes. Todos os usuários subsequentes têm o erro "conta especificada já existe".
Procurei este erro e encontrei uma pergunta antiga com um problema semelhante. Infelizmente, a resolução foi "use Powershell", que não é uma opção como o O módulo AD não está disponível na versão do Windows que devo usar (Server 2008 x64)
Editar 2
O problema secundário em que usuários aparentemente aleatórios falharam ao executar o comando se tornou diretamente um problema de usuários com o mesmo samAccountName em uma OU diferente, que é não permitido .
Editar 3
Alterando do
para do echo
para gravar o comando em um novo arquivo batch gerou comandos como os seguintes:
dsaddUser "cn=Carroll Colhoun,ou=Testou,dc=mydomain,dc=com" -samid [email protected] -fn "Carroll" -ln "Colhoun" -display "Carroll Colhoun" -disabled no -mustchpwd no
Comparado à execução do mesmo do echo
dsadd diretamente, o que gera isso:
dsaddUser "cn=Carroll Colhoun,ou=Testou,dc=mydomain,dc=com" -samid Carroll.Colhoun -pwd "xLxP}zUdCF4rpzUkB#uS" -upn [email protected] -fn "Carroll" -ln "Colhoun" -display "Carroll Colhoun" -disabled no -mustchpwd no
Então, de alguma forma, executar o comando como um arquivo em lote está omitindo toda a seção Carroll.Colhoun -pwd "xLxP}zUdCF4rpzUkB#uS" -upn Carroll.Colhoun
e substituindo-a por apenas k