none
((Melhoria em Script de criação de Grupos no Active Directory)) RRS feed

  • Pergunta

  • Senhores,
    tenho as seguintes variaveis em um script criado  no forum http://social.technet.microsoft.com/Forums/pt-BR/scriptadminpt/thread/2d86cb2f-be30-4ea0-a633-7af1d731a9b4, funciona perfeitamente, só estou tentando adaptar algumas alterações

    Dim objDSE, strDefaultDN, strDN, objContainer,objChild,objUser
    Dim strCaminho,strPasta,strGrupoLer,strGrupoMod,strGrupoFull
    Dim strFolder,WshShell,WshNetwork,objGroup


    Eu ja fiz de tudo, mas ainda estou tentando entender codigos vb, eu gostaria que o script automatizasse ainda mais a minha criação de grupos

    Eu gostaria que o script criasse o grupo com o nome:
    "\\gru\\+"_"strCaminho+"_"strPasta+"_"strGrupoMod

    e para finalizar criasse o grupo em ou=Test Only,ou=BR-IT,dc=a,dc=b,dc=c


    Function CreateGrupo(nome,strDN)
    Set objContainer = GetObject("LDAP://" & strDN)
    Set objGroup = objContainer.Create("Group", "cn="& nome)
    objGroup.put "name", " & strCaminho & "-" & strPasta & "-"& strGrupoMod" & nome
    objGroup.put "SamAccountName", " & strCaminho & "-" & strPasta & "-"& strGrupoMod" & nome
    objGroup.Put "description", "\\gru\\"& strCaminho & "-" & strPasta
    objGroup.setinfo


    MCP, MCDST, MCTS, MCSA, MCSE, MCT, ITIL
    quarta-feira, 29 de abril de 2009 13:21

Respostas

  • Olá,

    Dá uma olhada no script abaixo:


    Option Explicit
    on error resume next

    Dim objDSE, strDefaultDN, strDN, objContainer,objChild,objUser
    Dim strCaminho,strPasta,strGrupoLer,strGrupoMod,strGrupoFull
    Dim strFolder,WshShell,WshNetwork,objGroup,arrayPasta,strDescric,l

    Set objDSE = GetObject("LDAP://rootDSE")
    strDefaultDN = "CN=Users," & objDSE.Get("defaultNamingContext")

    strDN =     InputBox("Coloque o Distinguished Name do Objeto" & _
        vbCrLf & "(Exemplo: " & strDefaultDN & ")", , strDefaultDN)

    If strDN = "" Then WScript.Quit(1)      

    strGrupoLer = InputBox("Coloque o nome do Grupo para Permissão de Leitura" & _
        vbCrLf & "(Ex.:  " & "Dominio\GrupoA" & ")", , "GrupoA")

    If strGrupoLer = "" Then WScript.Quit(1) 



    strGrupoMod = InputBox("Coloque o nome do Grupo para Permissão de Modificar" & _
        vbCrLf & "(Ex.:  " & "Dominio\GrupoB" & ")", , "GrupoB")

    If strGrupoMod = "" Then WScript.Quit(1) 

    strCaminho = InputBox("Coloque o Caminho da Pasta" & _
        vbCrLf & "(Ex.:  " & "C:\pasta" & ")", , "C:\Pasta")

    If strCaminho = "" Then WScript.Quit(1) 

    strPasta = InputBox("Coloque o nome da Pasta" & _
        vbCrLf & "(Ex.:  " & "Pasta" & ")", , "Pasta")

    If strPasta= "" Then WScript.Quit(1) 
    CreateGrupo strGrupoLer,strDN
    CreateGrupo strGrupoMod, strDN

    Set strFolder = CreateObject("Scripting.FileSystemObject")
    Set WshNetwork = WScript.CreateObject("WScript.Network")
    Set WshShell=CreateObject("Wscript.Shell")

    If strFolder.FolderExists (strCaminho & "\" & strPasta) = False Then
       strFolder.CreateFolder (strCaminho & "\" & strPasta)
    End If

    WshShell.Run "CACLS " & strCaminho & "\" & strPasta & " /E /c /G "& strGrupoLer  &":R"
    WshShell.Run "CACLS " & strCaminho & "\" & strPasta & " /E /c /G "& strGrupoMod  &":C"
    WshShell.Run "CACLS " & strCaminho & "\" & strPasta & " /E /c /G "& strGrupoFull  &":F"

    Function CreateGrupo(nome,strDN)

    arrayPasta = Split(strCaminho,"\")

    strDescric = "\\gru\\"
    For l= 1 to UBound(arrayPasta)
       strDescric = strDescric & arrayPasta(l) & "\\"
    Next
    strDescric = strDescric & strPasta

    Set objContainer = GetObject("LDAP://" & strDN)

    Set objGroup = objContainer.Create("Group", "cn="& nome)
    objGroup.put "name",nome
    objGroup.put "SamAccountName", nome
    objGroup.put "description",strDescric
    objGroup.setinfo

    End Function


    Quanto ao caminho da ou, testei aqui e está correto.

    Exemplo: para gravar na OU administrativo o caminho seria:

    ou=administrativo,dc=contoso,dc=msft

    Onde o contoso.msft é o nome do dominio.

    Faça os testes e nos retorne.

    Até mais,

    Jesiel

    Obs.: Se útil, classifique

    quarta-feira, 29 de abril de 2009 17:29

Todas as Respostas

  • Olá Adriano,

    Não entendi o Nome do Grupo.

    Passe o Nome inteiro (Sem os sinais de Aspas) Como você quer gravar.

    Até mais,

    Jesiel
    quarta-feira, 29 de abril de 2009 14:02
  • Jesiel,

    Eu estive pensando, não vou ter como criar automatico o grupo tendo como referencia a convenção de nomes que usamos na emprea
    por exemplo:

    A convenção de nomes de grupos na empresa é:

    GR_COA_FIN_FIN2009
    GW_COA_FIN_FIN2009

    GR/GW Grupo de Leitura e Gravação
    COA - Diretório na REde (Primeiro Nivel)
    FIN  - Diretorio filho de COA (Segundo Nivel)
    FIN2009 - Nome da Pasta criada

    Não vejo como automatizar isso através de um script

    Acho que acertando somente a questão do descrição automatica ja estaria suficiente

    a descrição do grupo deve ser:
    \\gru\\coa\\fin\\fin2009

    ou seja "\\gru\\caminho da pasta + Pasta"  usa-se duas barras mesmo \\ e a descrição fixa GRU por causa de uma ferramenta de selfservice.


    Não consigo tambem visualizar uma maneira de preencher a descrição tendo como base a convenção de nomes que utilizamos hoje, pelo menos por nào ter conhecimentos profundos em VB.

    E tambem o que finalizaria o script seria a criação numa determinada OU, alterei o caminho LDAP, mas tambem nao funcionou


    MCP, MCDST, MCTS, MCSA, MCSE, MCT, ITIL
    • Marcado como Resposta Adriano Neiva quarta-feira, 29 de abril de 2009 20:23
    • Não Marcado como Resposta Jesiel S. Pereira quarta-feira, 29 de abril de 2009 20:47
    quarta-feira, 29 de abril de 2009 14:45
  • Olá,

    Dá uma olhada no script abaixo:


    Option Explicit
    on error resume next

    Dim objDSE, strDefaultDN, strDN, objContainer,objChild,objUser
    Dim strCaminho,strPasta,strGrupoLer,strGrupoMod,strGrupoFull
    Dim strFolder,WshShell,WshNetwork,objGroup,arrayPasta,strDescric,l

    Set objDSE = GetObject("LDAP://rootDSE")
    strDefaultDN = "CN=Users," & objDSE.Get("defaultNamingContext")

    strDN =     InputBox("Coloque o Distinguished Name do Objeto" & _
        vbCrLf & "(Exemplo: " & strDefaultDN & ")", , strDefaultDN)

    If strDN = "" Then WScript.Quit(1)      

    strGrupoLer = InputBox("Coloque o nome do Grupo para Permissão de Leitura" & _
        vbCrLf & "(Ex.:  " & "Dominio\GrupoA" & ")", , "GrupoA")

    If strGrupoLer = "" Then WScript.Quit(1) 



    strGrupoMod = InputBox("Coloque o nome do Grupo para Permissão de Modificar" & _
        vbCrLf & "(Ex.:  " & "Dominio\GrupoB" & ")", , "GrupoB")

    If strGrupoMod = "" Then WScript.Quit(1) 

    strCaminho = InputBox("Coloque o Caminho da Pasta" & _
        vbCrLf & "(Ex.:  " & "C:\pasta" & ")", , "C:\Pasta")

    If strCaminho = "" Then WScript.Quit(1) 

    strPasta = InputBox("Coloque o nome da Pasta" & _
        vbCrLf & "(Ex.:  " & "Pasta" & ")", , "Pasta")

    If strPasta= "" Then WScript.Quit(1) 
    CreateGrupo strGrupoLer,strDN
    CreateGrupo strGrupoMod, strDN

    Set strFolder = CreateObject("Scripting.FileSystemObject")
    Set WshNetwork = WScript.CreateObject("WScript.Network")
    Set WshShell=CreateObject("Wscript.Shell")

    If strFolder.FolderExists (strCaminho & "\" & strPasta) = False Then
       strFolder.CreateFolder (strCaminho & "\" & strPasta)
    End If

    WshShell.Run "CACLS " & strCaminho & "\" & strPasta & " /E /c /G "& strGrupoLer  &":R"
    WshShell.Run "CACLS " & strCaminho & "\" & strPasta & " /E /c /G "& strGrupoMod  &":C"
    WshShell.Run "CACLS " & strCaminho & "\" & strPasta & " /E /c /G "& strGrupoFull  &":F"

    Function CreateGrupo(nome,strDN)

    arrayPasta = Split(strCaminho,"\")

    strDescric = "\\gru\\"
    For l= 1 to UBound(arrayPasta)
       strDescric = strDescric & arrayPasta(l) & "\\"
    Next
    strDescric = strDescric & strPasta

    Set objContainer = GetObject("LDAP://" & strDN)

    Set objGroup = objContainer.Create("Group", "cn="& nome)
    objGroup.put "name",nome
    objGroup.put "SamAccountName", nome
    objGroup.put "description",strDescric
    objGroup.setinfo

    End Function


    Quanto ao caminho da ou, testei aqui e está correto.

    Exemplo: para gravar na OU administrativo o caminho seria:

    ou=administrativo,dc=contoso,dc=msft

    Onde o contoso.msft é o nome do dominio.

    Faça os testes e nos retorne.

    Até mais,

    Jesiel

    Obs.: Se útil, classifique

    quarta-feira, 29 de abril de 2009 17:29
  • Mais uma Vez perfeito,


    agora só falta perfumaria, que eu vou tentar me matar um pouco pra tentar incluir .

    Na verdade não é tão perfumaria, é que usamos o atributo ManagedBy em todos os grupos criados no Active Directory, porque a  solicitação de acesso a grupos e tambem a liberação é feio de forma automatica, ou seja o Owner do grupo recebe a  solicitação por e-mail e simplesmente clica em aprovar ou negar, o software WEBDIR inamami faz a tarefa de incluir e exluir membros dos grupos.


    a minha intenção era incluir neste script tambem uma função que:

    Perguntasse o nome do dono do grupo e o inclui-se de forma automatica nos grupos criados pelo script e tambem marcasse a opção "manager can be update membership list" de cada grupo criado.


    se alguem souber de bate pronto como fazer isso, eu agradeço


    Obrigado e classificado


    MCP, MCDST, MCTS, MCSA, MCSE, MCT, ITIL
    quarta-feira, 29 de abril de 2009 20:23