dsadd executado a partir do arquivo em lote falha com “A conta especificada já existe” quando não há uma conta existente com o mesmo dn

2

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

    
por AlannaRose 22.10.2014 / 00:39

1 resposta

0

Para o problema do arquivo de lote, descobri que estava trabalhando com a cópia incorreta do arquivo (um diferente do que copiei e colei aqui) que tinha um erro de digitação em que samid e upn usavam %k de %%k . Não tenho certeza de como isso foi introduzido, mas corrigir os erros de digitação permitirá que o arquivo em lote seja executado com êxito.

(Se for mais apropriado fazer isso como uma edição, por favor, comente e eu vou mudar isso)

    
por 22.10.2014 / 20:37