none
Consultar status de conta no AD RRS feed

  • Pergunta

  • Ba galera.

    Bom dia

    Alguem consegue me dar uma força tche no script abaixo, o mesmo faz uma consulta no AD e me da se o usuário esta com a senha bloqueada ou não tche, porem para isso eu tenho que informar todo o caminho LDAP do usuário, existe uma forma que eu possa colocar um inputbox para informar o codigo do usuário e ele encontre em qual OU do AD ele esta e colete o status, e caso não seja encontrado ele informe que o usuário não existe tche.

    codigo.

    on error resume next
    
    Set objuser = GetObject("LDAP://cn=msilva,ou=TI,ou=SP,DC=RTV,DC=local")
    
    if objLockout.lowpart = 0 And objLockout.highpart = 0 Then
      isAccountLocked = "Esta conta não esta bloqueada no AD CORP"
    Else
      isAccountLocked = "Esta conta esta bloqueada no AD CORP"
    End If
    
    wscript.echo isAccountLocked

    terça-feira, 11 de novembro de 2014 12:21

Respostas

  • Marcelo,

    Você tem que usar uma rotina pra localizar o usuário no AD pelo campo que você precisa, encontrado o usuário aí você pega o ADsPath (ldap:\\nomedousuario,....) que é o campo que você precisa pra gerenciar a conta.

    Peguei um exemplo e fiz uma rápida modificação, criei uma function onde você passa o Login e ele te retorna o ADsPath.

    msgbox Get_LDAP_Path("fabiojr")
    
    Function Get_LDAP_Path(strSName)
    	'SearchAD.vbs
    	On Error Resume Next
    	' Connect to the LDAP server's root object
    	Set objRootDSE = GetObject("LDAP://RootDSE")
    	strDNSDomain = objRootDSE.Get("defaultNamingContext")
    	strTarget = "LDAP://" & strDNSDomain
    	'wscript.Echo "Starting search from " & strTarget
    
    	' Connect to Ad Provider
    	Set objConnection = CreateObject("ADODB.Connection")
    	objConnection.Provider = "ADsDSOObject"
    	objConnection.Open "Active Directory Provider"
    
    	Set objCmd =   CreateObject("ADODB.Command")
    	Set objCmd.ActiveConnection = objConnection 
    
    	' Show only computers
    	'objCmd.CommandText = "SELECT Name, ADsPath FROM '" & strTarget & "' WHERE objectCategory = 'computer'"
    
    	' or show only users
    	objCmd.CommandText = "SELECT Name, ADsPath FROM '" & strTarget & "' WHERE objectCategory = 'user' and samaccountname='" & strSName & "'"
    
    	' or show only groups
    	'objCmd.CommandText = "SELECT Name, ADsPath FROM '" & strTarget & "' WHERE objectCategory = 'group'"
    
    	Const ADS_SCOPE_SUBTREE = 2
    	objCmd.Properties("Page Size") = 100
    	objCmd.Properties("Timeout") = 30
    	objCmd.Properties("Searchscope") = ADS_SCOPE_SUBTREE
    	objCmd.Properties("Cache Results") = False
    
    	Set objRecordSet = objCmd.Execute
    
    	' Iterate through the results
    	objRecordSet.MoveFirst
    	Do Until objRecordSet.EOF
    	   Get_LDAP_Path = objRecordSet.Fields("ADsPath")
    	   exit do
    	   objRecordSet.MoveNext
    	Loop
    end function

    Ref.:

    Search AD

    http://ss64.com/vb/syntax-ad.html


    Fábio de Paula Junior

    • Marcado como Resposta Marcelo TI terça-feira, 11 de novembro de 2014 14:12
    terça-feira, 11 de novembro de 2014 12:55
    Moderador
  • Porque você tentou com True?

    Use um Msgbox com o seu strValor pra descobrir qual o valor quando não retorna resultado, eu acredito que seja "" ou null.


    Fábio de Paula Junior

    • Marcado como Resposta Marcelo TI terça-feira, 11 de novembro de 2014 18:47
    terça-feira, 11 de novembro de 2014 17:25
    Moderador

Todas as Respostas

  • Marcelo,

    Você tem que usar uma rotina pra localizar o usuário no AD pelo campo que você precisa, encontrado o usuário aí você pega o ADsPath (ldap:\\nomedousuario,....) que é o campo que você precisa pra gerenciar a conta.

    Peguei um exemplo e fiz uma rápida modificação, criei uma function onde você passa o Login e ele te retorna o ADsPath.

    msgbox Get_LDAP_Path("fabiojr")
    
    Function Get_LDAP_Path(strSName)
    	'SearchAD.vbs
    	On Error Resume Next
    	' Connect to the LDAP server's root object
    	Set objRootDSE = GetObject("LDAP://RootDSE")
    	strDNSDomain = objRootDSE.Get("defaultNamingContext")
    	strTarget = "LDAP://" & strDNSDomain
    	'wscript.Echo "Starting search from " & strTarget
    
    	' Connect to Ad Provider
    	Set objConnection = CreateObject("ADODB.Connection")
    	objConnection.Provider = "ADsDSOObject"
    	objConnection.Open "Active Directory Provider"
    
    	Set objCmd =   CreateObject("ADODB.Command")
    	Set objCmd.ActiveConnection = objConnection 
    
    	' Show only computers
    	'objCmd.CommandText = "SELECT Name, ADsPath FROM '" & strTarget & "' WHERE objectCategory = 'computer'"
    
    	' or show only users
    	objCmd.CommandText = "SELECT Name, ADsPath FROM '" & strTarget & "' WHERE objectCategory = 'user' and samaccountname='" & strSName & "'"
    
    	' or show only groups
    	'objCmd.CommandText = "SELECT Name, ADsPath FROM '" & strTarget & "' WHERE objectCategory = 'group'"
    
    	Const ADS_SCOPE_SUBTREE = 2
    	objCmd.Properties("Page Size") = 100
    	objCmd.Properties("Timeout") = 30
    	objCmd.Properties("Searchscope") = ADS_SCOPE_SUBTREE
    	objCmd.Properties("Cache Results") = False
    
    	Set objRecordSet = objCmd.Execute
    
    	' Iterate through the results
    	objRecordSet.MoveFirst
    	Do Until objRecordSet.EOF
    	   Get_LDAP_Path = objRecordSet.Fields("ADsPath")
    	   exit do
    	   objRecordSet.MoveNext
    	Loop
    end function

    Ref.:

    Search AD

    http://ss64.com/vb/syntax-ad.html


    Fábio de Paula Junior

    • Marcado como Resposta Marcelo TI terça-feira, 11 de novembro de 2014 14:12
    terça-feira, 11 de novembro de 2014 12:55
    Moderador
  • Ba tree legal tche, obrigado mas uma vez Fabião.
    terça-feira, 11 de novembro de 2014 14:13
  • Ba Fabião fiquei tão empolgado tche que nem perguntei como eu poderia colocar um if que de desse o resultado caso ele encontre o caminho ldap, e caso não ele falei que não encontrou o usuário tche.

    tentei assim mas não rolou tche.

    strvalor =Get_LDAP_Path("msilva")

    if strvalor = True then

       msgbox strvalor

     else

       msgbox "usuário não existe"

    end if


    terça-feira, 11 de novembro de 2014 14:25
  • Porque você tentou com True?

    Use um Msgbox com o seu strValor pra descobrir qual o valor quando não retorna resultado, eu acredito que seja "" ou null.


    Fábio de Paula Junior

    • Marcado como Resposta Marcelo TI terça-feira, 11 de novembro de 2014 18:47
    terça-feira, 11 de novembro de 2014 17:25
    Moderador
  • Ba Fabião valeu veio null.
    terça-feira, 11 de novembro de 2014 18:47