none
Script com estrutura de case Apartir da OU RRS feed

  • Pergunta

  • Estou com um problema com meu Script com estrtura de case que faz referencia aos grupos de usuários.. muita intermitência..

    gostaria de testar um script com estrutura de case, apartir da OU do usuário, porem não sei como realiza-lo se alguem poder me ajudar fico grato..

    vou por o trecho do script que faz o case por grupo de usuário.

     Set objSysInfo = CreateObject("ADSystemInfo")
    Set objNetwork = CreateObject("Wscript.Network")

    strUserPath = "LDAP://" & objSysInfo.UserName
    Set objUser = GetObject(strUserPath)

    For Each strGroup in objUser.MemberOf
        strGroupPath = "LDAP://" & strGroup
        Set objGroup = GetObject(strGroupPath)
        strGroupName = objGroup.CN
            Case "x"
                Executar procedimento de x
            Case "y"
               Executar procedimento de y
        End Select
    Next.


     

    segunda-feira, 5 de março de 2007 12:46

Respostas

  • Para eu pegar a OU dos usuários eu utilizo este script:

    Function fncPegarOU()

      Dim oConnection, oCommand, oRecordSet, sVlr, sPos, oWinNT, oNetwork

      Set oNetwork = CreateObject("Wscript.Network")

      Set oWinNT = GetObject("WinNT://DOMINIO/" & oNetwork.UserName & ",user")

      sUser = oWinNt.FullName

      Set oWinNT = Nothing

      Set oConnection = CreateObject("ADODB.Connection")
      Set oCommand    = CreateObject("ADODB.Command")
      oConnection.Provider = "ADsDSOObject"
      oConnection.Open "Active Directory Provider"
      Set oCommand.ActiveConnection = oConnection
      oCommand.CommandText = "Select ADsPath from 'LDAP://DC=DOMINIO,DC=COM' where objectClass='user' and name='" & sUser & "'"
      oCommand.Properties("Page Size") = 1000
      oCommand.Properties("Timeout") = 30
      oCommand.Properties("Cache Results") = False
      Set oRecordSet = oCommand.Execute

      If not oRecordSet.EOF Then
        sVlr = oRecordSet.Fields("ADsPath").Value
        sPos = InStr(sVlr,",DC=DOMINIO,DC=COM")
        fncPegarOU = LCase(Mid(sVlr, Len(sUser) + 24, sPos - (Len(sUser) + 24)))
      Else
        fncPegarOU = ""
      End If

      Set oRecordSet  = Nothing
      Set oCommand    = Nothing
      Set oConnection = Nothing

    End Function

    Ai é só vc utilizar na estrutura case:

    Select Case fncPegarOU()

       Case "x"

          'xxxxxxxxxxxx

      Case "y"

        'yyyyyyyyyy

    End Select

    A na variável sVlr ela retornará o ADsPath, por isso que na linha de baixo eu uso instr e o Mid... Qualquer coisa, se vc não entender avise... E alterar os DOMINIOs da vida...

    Abraços

    segunda-feira, 5 de março de 2007 15:04
  • Em qual linha está dando o erro?

    Tente tirar este código:

    Set oNetwork = CreateObject("Wscript.Network")

      Set oWinNT = GetObject("WinNT://xyz.com.br/" & oNetwork.UserName & ",user")

      sUser = oWinNt.FullName

      Set oWinNT = Nothing

    e no lugar coloque:

    sUser = SEUALIAS

    Eu utilizo este código pq aqui no meu dominio está no modo misto...

    Abraços

    terça-feira, 6 de março de 2007 11:49
  • Ok o método UserName do objeto Wscript.Network me retorna somente o usuário (Logon), p/ eu pesquisar no AD a partir de OUs, preciso do Alias do user, ai utilizo o método FullName... entendeu?

     

    vc está atribuindo o ALIAS a variável sUser?

    como está a estrutura de OU sua? As OUs estão todas abaixo do domínio xyz.com.br?

    Abraços

    quarta-feira, 7 de março de 2007 13:59
  • O problema é mesmo só pegar a OU?

    Se precisar do DistinguishedName de um usuário, é mais fácil usar essa função pronta:
    http://www.microsoft.com/technet/scriptcenter/csc/scripts/ad/users/cscad085.mspx

    []s,


    --
    Vinicius Canto <scripterbr_at_gmail_dot_com>
    MVP Visual Developer - Scripting
    MCP Windows 2000 Server, Windows XP e SQL Server 2000
    Blog sobre Scripting: http://viniciuscanto.blogspot.com

    quarta-feira, 7 de março de 2007 23:47
    Moderador

Todas as Respostas

  • Para eu pegar a OU dos usuários eu utilizo este script:

    Function fncPegarOU()

      Dim oConnection, oCommand, oRecordSet, sVlr, sPos, oWinNT, oNetwork

      Set oNetwork = CreateObject("Wscript.Network")

      Set oWinNT = GetObject("WinNT://DOMINIO/" & oNetwork.UserName & ",user")

      sUser = oWinNt.FullName

      Set oWinNT = Nothing

      Set oConnection = CreateObject("ADODB.Connection")
      Set oCommand    = CreateObject("ADODB.Command")
      oConnection.Provider = "ADsDSOObject"
      oConnection.Open "Active Directory Provider"
      Set oCommand.ActiveConnection = oConnection
      oCommand.CommandText = "Select ADsPath from 'LDAP://DC=DOMINIO,DC=COM' where objectClass='user' and name='" & sUser & "'"
      oCommand.Properties("Page Size") = 1000
      oCommand.Properties("Timeout") = 30
      oCommand.Properties("Cache Results") = False
      Set oRecordSet = oCommand.Execute

      If not oRecordSet.EOF Then
        sVlr = oRecordSet.Fields("ADsPath").Value
        sPos = InStr(sVlr,",DC=DOMINIO,DC=COM")
        fncPegarOU = LCase(Mid(sVlr, Len(sUser) + 24, sPos - (Len(sUser) + 24)))
      Else
        fncPegarOU = ""
      End If

      Set oRecordSet  = Nothing
      Set oCommand    = Nothing
      Set oConnection = Nothing

    End Function

    Ai é só vc utilizar na estrutura case:

    Select Case fncPegarOU()

       Case "x"

          'xxxxxxxxxxxx

      Case "y"

        'yyyyyyyyyy

    End Select

    A na variável sVlr ela retornará o ADsPath, por isso que na linha de baixo eu uso instr e o Mid... Qualquer coisa, se vc não entender avise... E alterar os DOMINIOs da vida...

    Abraços

    segunda-feira, 5 de março de 2007 15:04
  • testei seu script mas o mesmo não funcionou!!

    não se fiz algo de errado nas alterações, porem acho que não

    vou te passar como ficou

    Function fncPegarOU()

      Dim oConnection, oCommand, oRecordSet, sVlr, sPos, oWinNT, oNetwork

      Set oNetwork = CreateObject("Wscript.Network")

      Set oWinNT = GetObject("WinNT://xyz.com.br/" & oNetwork.UserName & ",user")

      sUser = oWinNt.FullName

      Set oWinNT = Nothing

      Set oConnection = CreateObject("ADODB.Connection")
      Set oCommand    = CreateObject("ADODB.Command")
      oConnection.Provider = "ADsDSOObject"
      oConnection.Open "Active Directory Provider"
      Set oCommand.ActiveConnection = oConnection
      oCommand.CommandText = "Select ADsPath from 'LDAP://DC=xyz,DC=com,DC=br' where objectClass='user' and name='" & sUser & "'"
      oCommand.Properties("Page Size") = 1000
      oCommand.Properties("Timeout") = 30
      oCommand.Properties("Cache Results") = False
      Set oRecordSet = oCommand.Execute

      If not oRecordSet.EOF Then
        sVlr = oRecordSet.Fields("ADsPath").Value
        sPos = InStr(sVlr,",DC=xyz,DC=com,DC=br")
        fncPegarOU = LCase(Mid(sVlr, Len(sUser) + 24, sPos - (Len(sUser) + 24)))
      Else
        fncPegarOU = ""
      End If

      Set oRecordSet  = Nothing
      Set oCommand    = Nothing
      Set oConnection = Nothing

    End Function

    'WScript.Echo oConnection
    'WScript.Echo oCommand
    'WScript.Echo oRecordSet
    'WScript.Echo oRecordSet
    'WScript.Echo sVlr
    'WScript.Echo sPos
    'WScript.Echo oWinNT
    'WScript.Echo oNetwork

    Select Case fncPegarOU()

       Case "teste"

      WScript.Echo "Funcionando"

     ' Case "y"

        'yyyyyyyyyy

    End Select

    Eu até dei um echo nas variáveis pra ver eles retornavam o valor correspondentes a elas, mais não retornaram nenhum valor.

    se vc poder rever o código ou meu erro eu ficarei grato!

    segunda-feira, 5 de março de 2007 19:07
  • Em qual linha está dando o erro?

    Tente tirar este código:

    Set oNetwork = CreateObject("Wscript.Network")

      Set oWinNT = GetObject("WinNT://xyz.com.br/" & oNetwork.UserName & ",user")

      sUser = oWinNt.FullName

      Set oWinNT = Nothing

    e no lugar coloque:

    sUser = SEUALIAS

    Eu utilizo este código pq aqui no meu dominio está no modo misto...

    Abraços

    terça-feira, 6 de março de 2007 11:49
  • Não há erro algun em nenhumas linhas na execução do script!!

    apenas não acontece nada !!! não funfa porem não exibe nenhum erro !!!

    eu só não entedi a sua correção ai, se vc poder me explicar melhor agradeço !!!

     

    quarta-feira, 7 de março de 2007 11:23
  • Ok o método UserName do objeto Wscript.Network me retorna somente o usuário (Logon), p/ eu pesquisar no AD a partir de OUs, preciso do Alias do user, ai utilizo o método FullName... entendeu?

     

    vc está atribuindo o ALIAS a variável sUser?

    como está a estrutura de OU sua? As OUs estão todas abaixo do domínio xyz.com.br?

    Abraços

    quarta-feira, 7 de março de 2007 13:59
  • O problema é mesmo só pegar a OU?

    Se precisar do DistinguishedName de um usuário, é mais fácil usar essa função pronta:
    http://www.microsoft.com/technet/scriptcenter/csc/scripts/ad/users/cscad085.mspx

    []s,


    --
    Vinicius Canto <scripterbr_at_gmail_dot_com>
    MVP Visual Developer - Scripting
    MCP Windows 2000 Server, Windows XP e SQL Server 2000
    Blog sobre Scripting: http://viniciuscanto.blogspot.com

    quarta-feira, 7 de março de 2007 23:47
    Moderador