none
Mudar valor de atributo RRS feed

  • Pergunta

  • Boa tarde,

    Tem um atributo no AD chamado "extensionatribute4" gostaria de popular um valor nele qualquer para todos os usuários do meu dominio, tem como fazer isso em massa através de scripts?

    Obrigado
    Thales Laray
    segunda-feira, 20 de julho de 2009 14:55

Respostas

  • Olá,

    Utilize o script abaixo para gerar um arquivo no formato correto:

    Const ADS_SCOPE_SUBTREE = 2

    Set FileSystem = WScript.CreateObject("Scripting.FileSystemObject")
    Set OutPutFile = FileSystem.CreateTextFile("Lista_de_Usuarios.csv", True)

    Set objConnection = CreateObject("ADODB.Connection")
    Set objCommand =   CreateObject("ADODB.Command")
    objConnection.Provider = "ADsDSOObject"
    objConnection.Open "Active Directory Provider"
    Set objCommand.ActiveConnection = objConnection

    objCommand.Properties("Page Size") = 1000
    objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE

    objCommand.CommandText = _
        "SELECT name,description,distinguishedname,instanceType FROM 'LDAP://dc=contoso,dc=local' " & _
            "WHERE objectCategory='user'" 

    Set objRecordSet = objCommand.Execute

    objRecordSet.MoveFirst

    Do Until objRecordSet.EOF
        nome = objRecordSet.Fields("name").Value
        descricao = objRecordSet.Fields("description").Value
        cn = objRecordSet.Fields("distinguishedname").Value
        OutPutFile.WriteLine nome & ";" & cn
        objRecordSet.MoveNext
    Loop



    '===============================================================================================

    Utilize este script para atualizar os dados da planilha no AD

    Const ForReading = 1
    Const ADS_SCOPE_SUBTREE = 2

    Set objConnection = CreateObject("ADODB.Connection")
    Set objCommand =   CreateObject("ADODB.Command")
    objConnection.Provider = "ADsDSOObject"
    objConnection.Open "Active Directory Provider"
    Set objCommand.ActiveConnection = objConnection

    objCommand.Properties("Page Size") = 1000
    objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE

    Set objExcel = CreateObject("Excel.Application")


    'caminho do arquivo excel
    Set objWorkbook = objExcel.Workbooks.Open ("c:\Lista_de_Usuarios.csv")
    intRow = 2

    Do Until objExcel.Cells(intRow,1).Value = ""
       nome = objExcel.Cells(intRow, 1).Value
       cn = objExcel.Cells(intRow, 2).Value
       cargo = objExcel.Cells(intRow, 3).Value
       departamento = objExcel.Cells(intRow, 4).Value
       telefone =objExcel.Cells(intRow, 5).Value
      
       Set objUser = GetObject("LDAP://" & cn)
       objUser.TelephoneNumber = telefone
       objUser.Description = cargo
       objUser.Title = cargo
       objUser.Department = departamento
       objUser.SetInfo
       intRow = intRow + 1
    Loop

    objExcel.Quit



    Altere para os atributos que você desejar.


    Até mais,

    Jesiel

    Obs.: Se útil, classifique



    quinta-feira, 13 de agosto de 2009 15:47

Todas as Respostas

  • Olá,

    Verifique o script abaixo:



    Const ForReading = 1
    Const ADS_SCOPE_SUBTREE = 2


    Set objConnection = CreateObject("ADODB.Connection")
    Set objCommand =   CreateObject("ADODB.Command")
    objConnection.Provider = "ADsDSOObject"
    objConnection.Open "Active Directory Provider"
    Set objCommand.ActiveConnection = objConnection

    objCommand.Properties("Page Size") = 1000
    objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE

    objCommand.CommandText = _
           "SELECT name,description,distinguishedname,instanceType FROM 'LDAP://dc=contoso,dc=local' " & _
            "WHERE objectCategory='user' " 

    Set objRecordSet = objCommand.Execute

    objRecordSet.MoveFirst

    Do Until objRecordSet.EOF 

       cn = objRecordSet.Fields("distinguishedname").Value
       Set objUser = GetObject("LDAP://" & cn)
       objUser.extensionAttribute4 = "valor"
       objUser.SetInfo
    Loop

    O script acima insere o valor "valor" em todos os usuáriod do dominio contoso.local

    Faça os testes e nos retorne.


    Até mais,

    Jesiel

    Obs.: Se útil, classifique
    segunda-feira, 20 de julho de 2009 19:50
  • Prezado Jesiel,

    Fiz os testes porém não funcionou, alterei o script de acordo com o meu domain, ele roda, não dá nenhum erro porém o valor do atributo não aparece, o que pode ser?

    Obrigado.

    ------------------------------------------------------------------------------------------------------------------------------------------------

    Const ForReading = 1
    Const ADS_SCOPE_SUBTREE = 2


    Set objConnection = CreateObject("ADODB.Connection")
    Set objCommand =   CreateObject("ADODB.Command")
    objConnection.Provider = "ADsDSOObject"
    objConnection.Open "Active Directory Provider"
    Set objCommand.ActiveConnection = objConnection

    objCommand.Properties("Page Size") = 1000
    objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE

    objCommand.CommandText = _
           "SELECT name,description,distinguishedname,instanceType FROM 'LDAP://dc=lab01,dc=com,dc=br' " & _
            "WHERE objectCategory='user' "

    Set objRecordSet = objCommand.Execute

    objRecordSet.MoveFirst

    Do Until objRecordSet.EOF

       cn = objRecordSet.Fields("distinguishedname").Value
       Set objUser = GetObject("LDAP://" & cn)
       objUser.extensionAttribute4 = "teste1234"
       objUser.SetInfo
    Loop

    ---------------------------------------------------------------------------------------------------------------------------------------------------
    Thales Laray
    segunda-feira, 20 de julho de 2009 20:27
  • Na verdade, quando abro o gerenciador de tarefas o "wscript" ta lá rodando.. já ta lá a um tempão.. :(

    Thales Laray
    segunda-feira, 20 de julho de 2009 21:22
  • Olá,

    Thales, o nome do seu dominio é lab01.com.br ?

    Fiz os testes e funcionou... (só fiz uma correção no final e coloquei um alerta para checar se está pegando os nomes corretamente)

    Segue abaixo:


    Const ForReading = 1
    Const ADS_SCOPE_SUBTREE = 2


    Set objConnection = CreateObject("ADODB.Connection")
    Set objCommand =   CreateObject("ADODB.Command")
    objConnection.Provider = "ADsDSOObject"
    objConnection.Open "Active Directory Provider"
    Set objCommand.ActiveConnection = objConnection

    objCommand.Properties("Page Size") = 1000
    objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE

    objCommand.CommandText = _
           "SELECT name,description,distinguishedname,instanceType FROM 'LDAP://dc=contoso,dc=local' " & _
            "WHERE objectCategory='user' "

    Set objRecordSet = objCommand.Execute

    objRecordSet.MoveFirst

    Do Until objRecordSet.EOF

       cn = objRecordSet.Fields("distinguishedname").Value

    'somente para verificar se está mostrando os usuários, se funcionar, pode apagar a linha abaixo
       wscript.echo cn


       Set objUser = GetObject("LDAP://" & cn)
       objUser.extensionAttribute4 = "valor"
       objUser.SetInfo
       objRecordSet.MoveNext
    Loop





    Faça os testes e nos retorne.


    Até mais,

    Jesiel

    Obs.: Se útil, classifique
    terça-feira, 21 de julho de 2009 11:08

  • Estou testando em meu AD de testes, cujo nomé é o lab01.com.br

    Só alterei a linha do dominio para:

    "SELECT name,description,distinguishedname,instanceType FROM 'LDAP://dc=lab01,dc=com,dc=br' " & _
            "WHERE objectCategory='user' "

    E deu essa msg de erro abaixo na linha em que eu especifiquei o dominio.

    http://www.computerperformance.co.uk/Logon/code/code_800A0409.htm


    Thales Laray
    terça-feira, 21 de julho de 2009 15:49
  • Prezado,

    Teria como o script pegar os logins baseado em um arquivo de texto ou planilha em vez de ser aplicado a todos os usuários da rede?

    Obrigado
    Thales Laray
    quarta-feira, 12 de agosto de 2009 15:21
  • Olá,

    Utilize o script abaixo para gerar um arquivo no formato correto:

    Const ADS_SCOPE_SUBTREE = 2

    Set FileSystem = WScript.CreateObject("Scripting.FileSystemObject")
    Set OutPutFile = FileSystem.CreateTextFile("Lista_de_Usuarios.csv", True)

    Set objConnection = CreateObject("ADODB.Connection")
    Set objCommand =   CreateObject("ADODB.Command")
    objConnection.Provider = "ADsDSOObject"
    objConnection.Open "Active Directory Provider"
    Set objCommand.ActiveConnection = objConnection

    objCommand.Properties("Page Size") = 1000
    objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE

    objCommand.CommandText = _
        "SELECT name,description,distinguishedname,instanceType FROM 'LDAP://dc=contoso,dc=local' " & _
            "WHERE objectCategory='user'" 

    Set objRecordSet = objCommand.Execute

    objRecordSet.MoveFirst

    Do Until objRecordSet.EOF
        nome = objRecordSet.Fields("name").Value
        descricao = objRecordSet.Fields("description").Value
        cn = objRecordSet.Fields("distinguishedname").Value
        OutPutFile.WriteLine nome & ";" & cn
        objRecordSet.MoveNext
    Loop



    '===============================================================================================

    Utilize este script para atualizar os dados da planilha no AD

    Const ForReading = 1
    Const ADS_SCOPE_SUBTREE = 2

    Set objConnection = CreateObject("ADODB.Connection")
    Set objCommand =   CreateObject("ADODB.Command")
    objConnection.Provider = "ADsDSOObject"
    objConnection.Open "Active Directory Provider"
    Set objCommand.ActiveConnection = objConnection

    objCommand.Properties("Page Size") = 1000
    objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE

    Set objExcel = CreateObject("Excel.Application")


    'caminho do arquivo excel
    Set objWorkbook = objExcel.Workbooks.Open ("c:\Lista_de_Usuarios.csv")
    intRow = 2

    Do Until objExcel.Cells(intRow,1).Value = ""
       nome = objExcel.Cells(intRow, 1).Value
       cn = objExcel.Cells(intRow, 2).Value
       cargo = objExcel.Cells(intRow, 3).Value
       departamento = objExcel.Cells(intRow, 4).Value
       telefone =objExcel.Cells(intRow, 5).Value
      
       Set objUser = GetObject("LDAP://" & cn)
       objUser.TelephoneNumber = telefone
       objUser.Description = cargo
       objUser.Title = cargo
       objUser.Department = departamento
       objUser.SetInfo
       intRow = intRow + 1
    Loop

    objExcel.Quit



    Altere para os atributos que você desejar.


    Até mais,

    Jesiel

    Obs.: Se útil, classifique



    quinta-feira, 13 de agosto de 2009 15:47