none
Script para criar login via .csv - Preciso adicionar um campo RRS feed

  • Pergunta

  • Galera,

    Tenho o script abaixo que cria os logins no AD com base em um arquivo csv. Com exceção do campo "notes", ele esta funcionando corretamente.

    Alguém sabe como posso inserir um texto no campo "State/Province" (De preferência) ou no campo "Notes" no processo de criação do login?

    Com DSADD eu já sei que não é possível, mas quero saber se posso incluir uma instrução para complementar o script.

    Segue contéudo:

    (Get-Content usuarios1.csv) | Foreach-Object {$_ -replace "`"`"`"", "`""} | Set-Content usuarios1.csv
    (Get-Content usuarios1.csv) | Foreach-Object {$_ -replace "`"`"", "`""} | Set-Content usuarios1.csv
    (get-content usuarios1.csv) | ForEach-Object {$_ -replace "\;",","} | Set-Content usuarios1.csv
    import-csv usuarios1.csv | ForEach-Object {
    DSADD USER $_.CN -upn $_.UPN -fn $_.GivenName -ln $_.SN -display $_.DisplayName -office $_.OfficeName -desc $_.Description -email $_.Mail -dept $_.Department -tel $_.phone -mgr $_.Manager -pwd $_.Password -iptel $_.IPPhoneNumber -notes $_.notes -mustchpwd yes
    Enable-Mailbox $_.UPN -database $_.StorageGroup
    }

    quarta-feira, 14 de agosto de 2013 21:20

Respostas

Todas as Respostas

  • Olá K.ryn, como vai?

    Tudo que precisa sobre os parametros do dsadd user voce encontra no link abaixo;

    http://technet.microsoft.com/en-us/library/cc731279.aspx

    Caso queira, eu utilizo script em batch para fazer essa tarefa;

    for /F "eol=; tokens=1,2,3,4,5,6* delims=," %%i in (users.csv) do dsadd user cn="%%i",ou=<OU>,dc=<DOMINIO>,dc=local -samid %%j -upn %%j@DOMINIO.LOCA -fn "%%m" -ln "%%n" -display "%%i" -pwd %%k -desc %%l -disabled no

    Crie um arquivo csv contendo, na sequencia, Nome do Usuario, Conta e Senha de todos os usuarios. Salve como users.csv no mesmo diretorio do script. Este script é um loop que lerá todos as informações do arquivo CSV.

    Caso queria adicionar demais parâmetros, basta continuar com as variaveis incrementando (alfabeticamente: %%n, %%o....). Voce pode adicionar os parametros que desejar.

    Abraço

    quarta-feira, 14 de agosto de 2013 23:25
  • Foi nesse link que eu vi que não tem como usar os campos que citei com o dsadd, por isso que estou recorrendo ao forum. Mas agradeço a ajuda e aguardarei mais sugestões.
    quinta-feira, 15 de agosto de 2013 00:39
  • K.ryn,

    Se já está usando o PowerShell porque não usa o Set-ADUser ao invés do DSADD?

    Ref.:

    Set-ADUser

    http://technet.microsoft.com/en-us/library/ee617215.aspx


    Fábio de Paula Junior

    sexta-feira, 16 de agosto de 2013 02:45
    Moderador
  • Por que eu não criei o script do zero, eu adaptei às minhas necessidades e não tenho muito facilidade nisso.

    Queria manter o script que já tenho e testei, será que é possível utilizar o Set-Aduser como complementar apenas para pegar a ultima coluna do csv e alimentar o campo State?

    obrigado,

    segunda-feira, 19 de agosto de 2013 13:48
  • Sim, você pode usar apenas como complemento.

    import-module ActiveDirectory
    
    (Get-Content usuarios1.csv) | Foreach-Object {$_ -replace "`"`"`"", "`""} | Set-Content usuarios1.csv
    (Get-Content usuarios1.csv) | Foreach-Object {$_ -replace "`"`"", "`""} | Set-Content usuarios1.csv
    (get-content usuarios1.csv) | ForEach-Object {$_ -replace "\;",","} | Set-Content usuarios1.csv
    import-csv usuarios1.csv | ForEach-Object {
    	DSADD USER $_.CN -upn $_.UPN -fn $_.GivenName -ln $_.SN -display $_.DisplayName -office $_.OfficeName -desc $_.Description -email $_.Mail -dept $_.Department -tel $_.phone -mgr $_.Manager -pwd $_.Password -iptel $_.IPPhoneNumber -notes $_.notes -mustchpwd yes
    Enable-Mailbox $_.UPN -database $_.StorageGroup
    
    	#Atualizando o campo Notes e State
    	set-ADUser $_.CN -Replace @{info=$_.notes;st=$_.Estado}
    	
    
    }

    Eu não testei o código, mas não é muito diferente disso.

    Também não conheço o cabeçalho do ser csv então chutei o nome dos campos (Estado).


    Fábio de Paula Junior


    segunda-feira, 19 de agosto de 2013 14:56
    Moderador
  • Obrigado pela resposta.

    Ocorre erro referente termo "Set-ADUser" por que não esta sendo reconhecido como cmdlet... será que preciso adicionar mais alguma informação?

    O script eu executo dentro do shell do Exchange (que é pré-requisito) para criar a caixa de e-mail, pelo que eu entendi.

    Tem alguma sugestão para permitir o correto reconhecimento? 

    segunda-feira, 19 de agosto de 2013 15:20
  • Veja que também adicionei no seu script uma primeira linha

    import-module ActiveDirectory


    Fábio de Paula Junior

    segunda-feira, 19 de agosto de 2013 16:46
    Moderador
  • Fábio,

    Eu não havia percebido que você havia inserido a importação do módulo, mas ainda ocorre erro.

    Estou usando um Windows 2008 SP2 com Powershell 2.0, mas ocorre erro abaixo. Possui alguma sugestão?

    [PS] C:\Scripts>import-module ActiveDirectory
    Import-Module : The specified module 'ActiveDirectory' was not loaded because n
    o valid module file was found in any module directory.
    At line:1 char:14
    + import-module <<<<  ActiveDirectory
        + CategoryInfo          : ResourceUnavailable: (ActiveDirectory:String) [I
       mport-Module], FileNotFoundException
        + FullyQualifiedErrorId : Modules_ModuleNotFound,Microsoft.PowerShell.Comm
       ands.ImportModuleCommand

    segunda-feira, 19 de agosto de 2013 17:27
  • Adicione a feature ao servidor.


    Fábio de Paula Junior

    segunda-feira, 19 de agosto de 2013 17:31
    Moderador
  • Funcionou?

    Fábio de Paula Junior

    quarta-feira, 21 de agosto de 2013 12:06
    Moderador
  • Eu pensei que eu já havia respondido. Não funcionou por que até onde pesquisei, o Windows 2008 não tem esses módulos, somente a versão R2 que tem, portanto, não tenho como importar o módulo ou instalá-lo.

    No momento também não há previsão de atualização.

    Obrigado novamente.

    quarta-feira, 21 de agosto de 2013 13:31
  • Alternativas:

    1) Usar uma máquina com Windows 7, basta instalar o RSAT.

    Active Directory Administration with Windows PowerShell

    http://technet.microsoft.com/pt-br/library/dd378937(v=ws.10).aspx

    2) Trabalhar com Powershell sem usar módulos, mais trabalhoso mas funciona

    Working with Active Directory using PowerShell ADSI adapter

    http://social.technet.microsoft.com/wiki/contents/articles/4231.working-with-active-directory-using-powershell-adsi-adapter.aspx


    Fábio de Paula Junior

    • Marcado como Resposta K.ryn quinta-feira, 12 de setembro de 2013 12:55
    quarta-feira, 21 de agosto de 2013 14:02
    Moderador
  • A primeira opção esta fora de cogitação. A segunda esta muito além da minha capacidade de adaptar o script, mas agradeço a ajuda.
    quarta-feira, 21 de agosto de 2013 14:13
  • K.ryn,

    Veja um exemplo sem usar o módulo.

    (Get-Content usuarios1.csv) | Foreach-Object {$_ -replace "`"`"`"", "`""} | Set-Content usuarios1.csv
    (Get-Content usuarios1.csv) | Foreach-Object {$_ -replace "`"`"", "`""} | Set-Content usuarios1.csv
    (get-content usuarios1.csv) | ForEach-Object {$_ -replace "\;",","} | Set-Content usuarios1.csv
    import-csv usuarios1.csv | ForEach-Object {
    	DSADD USER $_.CN -upn $_.UPN -fn $_.GivenName -ln $_.SN -display $_.DisplayName -office $_.OfficeName -desc $_.Description -email $_.Mail -dept $_.Department -tel $_.phone -mgr $_.Manager -pwd $_.Password -iptel $_.IPPhoneNumber -notes $_.notes -mustchpwd yes
    Enable-Mailbox $_.UPN -database $_.StorageGroup
    
    	#Atualizando o campo Notes e State
    
    	#Exemplo: $User = [ADSI]"LDAP://CN=suporte,OU=teste,DC=lab,DC=forum,DC=com,DC=br"
    	$User = [ADSI]"LDAP://$_.CN"
    	$User.Put("info",$_.notes)
    	$User.Put("st",$_.Estado)
    	$User.SetInfo()
    
    	
    }

    Só preste atenção na linha que tem o [ADSI], veja que deixei um exemplo antes pois não sei o conteúdo do seu campo CN.


    Fábio de Paula Junior

    sexta-feira, 30 de agosto de 2013 13:57
    Moderador
  • Fábio, desculpe a demora em responder. Ainda ocorre erro na rotina do ADSI, tentei de diversos modos. Lembrando que executo o script dentro do shell do Exchange (2007, Windows 2008 SP2 que não é R2)

    Segue mensagem de erro:

    Exception calling "SetInfo" with "0" argument(s): "The requested operation did
    not satisfy one or more constraints associated with the class of the object. (E
    xception from HRESULT: 0x80072014)"
    At C:\Scripts\importar.ps1:18 char:15
    +     $User.SetInfo <<<< ()
        + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
        + FullyQualifiedErrorId : CatchFromBaseAdapterMethodInvokeTI

    Segue script alterado:

    (Get-Content usuarios1.csv) | Foreach-Object {$_ -replace "`"`"`"", "`""} | Set-Content usuarios1.csv
    (Get-Content usuarios1.csv) | Foreach-Object {$_ -replace "`"`"", "`""} | Set-Content usuarios1.csv
    (get-content usuarios1.csv) | ForEach-Object {$_ -replace "\;",","} | Set-Content usuarios1.csv

    import-csv usuarios1.csv | ForEach-Object {
    DSADD USER $_.CN -upn $_.UPN -fn $_.GivenName -ln $_.SN -display $_.DisplayName -office $_.OfficeName -desc $_.Description -email $_.Mail -dept $_.Department -pwd $_.Password -iptel $_.IPPhoneNumber -mustchpwd yes
    Enable-Mailbox $_.UPN -database $_.StorageGroup

    #Atualizando o campo Notes e State

    #Exemplo: $User = [ADSI]"LDAP://cn=Users,DC=dominio,DC=local"
    $User = [ADSI]"LDAP://cn=Users,DC=dominio,DC=local"
    #$User = [ADSI]"LDAP://$_.CN"
    #$User.Put("info",$_.notes)
    $User.Put("st",$_.Estado)
    $User.SetInfo()
    }

    Segue conteudo do csv que estou tentando usar:

    CN,UPN,GivenName,SN,DisplayName,OfficeName,Description,Mail,Department,Phone,Manager,Password,IPPhoneNumber,StorageGroup,st
    "CN=loginteste,cn=Users,DC=dominio,DC=local","loginteste@empresa.com.br","loginteste","Sobrenome","loginteste Completo","setor","descricao","loginteste@empresa.com.br","TI","12345678","CN=loginmanager9,CN=users,DC=dominio,DC=local","@suporte123","RETESTE","ServidorMail\Mailbox Database","campoestado"

    Obrigado mais uma vez pela ajuda,

    sexta-feira, 6 de setembro de 2013 13:33
  • K.ryn,

    Esta linha está errada:

    $User = [ADSI]"LDAP://cn=Users,DC=dominio,DC=local"

    Nela você está referenciando o containner/OU e na verdade você tem que fazer referência ao usuário, exemplo:

    $User = [ADSI]"LDAP://cn=k.ryin,cn=Users,DC=dominio,DC=local"

    Eu não sei os dados que vc tem na sua planilha, eu chutei que seri o $_.cn.


    Fábio de Paula Junior

    sexta-feira, 6 de setembro de 2013 14:05
    Moderador

  • Esse é o conteúdo da planilha:

    CN,UPN,GivenName,SN,DisplayName,OfficeName,Description,Mail,Department,Phone,Manager,Password,IPPhoneNumber,StorageGroup,st
    "CN=loginteste,cn=Users,DC=dominio,DC=local","loginteste@empresa.com.br","loginteste","Sobrenome","loginteste Completo","setor","descricao","loginteste@empresa.com.br","TI","12345678","CN=loginmanager9,CN=users,DC=dominio,DC=local","@suporte123","RETESTE","ServidorMail\Mailbox Database","campoestado"

    O script irá ler todas as linhas da planilha, como faço para usar uma variável ao invés de informar login por login? na planilha eu tenho o campo CN

    Segue mensagem de erro agora:

    The following exception occurred while retrieving member "Put": "Unknown error
    (0x80005000)"
    At C:\Scripts\importar.ps1:15 char:11
    +     $User.Put <<<< ("st",$_.Estado)
        + CategoryInfo          : NotSpecified: (:) [], ExtendedTypeSystemExceptio
       n
        + FullyQualifiedErrorId : CatchFromBaseGetMember

    The following exception occurred while retrieving member "SetInfo": "Unknown er
    ror (0x80005000)"
    At C:\Scripts\importar.ps1:16 char:15
    +     $User.SetInfo <<<< ()
        + CategoryInfo          : NotSpecified: (:) [], ExtendedTypeSystemExceptio
       n
        + FullyQualifiedErrorId : CatchFromBaseGetMember

    sexta-feira, 6 de setembro de 2013 14:13
  • Troque esta linha:

    $User = [ADSI]"LDAP://cn=Users,DC=dominio,DC=local"

    por estas duas

    $Usuario_Ldap=$_.CN
    $User = [ADSI]"LDAP://$Usuario_Ldap"

    Não tive como testar, me diz aí o que aconteceu.


    Fábio de Paula Junior

    sexta-feira, 6 de setembro de 2013 14:17
    Moderador
  • Deu erro:

    Exception calling "Put" with "2" argument(s): "Unspecified error (Exception fro
    m HRESULT: 0x80004005 (E_FAIL))"
    At C:\Scripts\importar.ps1:18 char:11
    +     $User.Put <<<< ("st",$_.Estado)
        + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
        + FullyQualifiedErrorId : CatchFromBaseAdapterMethodInvokeTI

    De onde exatamente ele irá pegar o parâmetro para o $_.Eestado? Nessa linha do script eu não inclui o st, mas tenho o st na planilha:

    DSADD USER $_.CN -upn $_.UPN -fn $_.GivenName -ln $_.SN -display $_.DisplayName -office $_.OfficeName -desc $_.Description -email $_.Mail -dept $_.Department -pwd $_.Password -iptel $_.IPPhoneNumber -mustchpwd yes
    Enable-Mailbox $_.UPN -database $_.StorageGroup

    sexta-feira, 6 de setembro de 2013 14:30
  • K.ryn,

    Me ajuda também, você acabou de passar quais os campos do seu arquivo texto, o meu campo Estado era um chute pois eu não conhecia o seu arquivo. Creio que vc tenha que usar $_.st no lugar do $_.Estado.

    E o campo info(é o notes), qual a coluna do seu arquivo texto você vai colocar lá?

    Tá fácil, tá na sua mão.


    Fábio de Paula Junior

    sábado, 7 de setembro de 2013 00:57
    Moderador
  • Conseguiu?

    Fábio de Paula Junior

    quinta-feira, 12 de setembro de 2013 12:46
    Moderador
  • Fábio, não consegui testar ainda mas optei por usar o Active Directory Gateway, acredito que irá funcionar com uma das suas sugestões. Obrigado.
    quinta-feira, 12 de setembro de 2013 12:56