Active Directory/Search for a user

From Rosetta Code

Jump to: navigation, search
Task
Active Directory/Search for a user
You are encouraged to solve this task according to the task description, using any language you may know.

Make sure you Connect to Active Directory

[edit] Ruby

Assume AD server talks LDAP.

Library: RubyGems

require 'rubygems'
require 'net/ldap'
 
ldap = Net::LDAP.new(:host => 'hostname', :base => 'base')
ldap.authenticate('bind_dn', 'bind_pass')
 
filter = Net::LDAP::Filter.pres('objectclass')
filter &= Net::LDAP::Filter.eq('sn','Jackman')
# or
filter = Net::LDAP::Filter.construct('(&(objectclass=*)(sn=Jackman))')
 
results = ldap.search(:filter => filter) # returns an array of Net::LDAP::Entry objects
 
puts results[0][:sn] # ==> "Jackman"

[edit] Tcl

One can do it with the low level Connect to Active Directory based handle with this code:

This is just the basic setup.

set Username "TestUser"
set Filter "((&objectClass=*)(sAMAccountName=$Username))"
set Base "dc=skycityauckland,dc=sceg,dc=com"
set Attrs distinguishedName

Now do the actual search.

set result [ldap::search $conn $Base $Filter $Attrs -scope subtree]

If we have only a single result its easy:

if {[llength $result] == 1} {
puts [dict get [lindex $result 0 1] distinguishedName]
}

Looping over the result set to output some values.

foreach pair $result {
lassign $pair cn attributes
puts [dict get $attributes distinguishedName]
}

If you're bored you can also use this instead:

package require ldapx
set conn [ldapx::connect $BindDN $Password]
$conn traverse $Base $Filter $Attrs e {
puts [$e get distinguishedName]
}

[edit] VBScript

The search string and execution of the string

strUsername = "TestUser"
strQuery = "<LDAP://dc=skycityauckland,dc=sceg,dc=com>;"_
& "(&(objectclass=*)(samaccountname=" & strUsername & "));distinguishedname;subtree"
objCmd.ActiveConnection = objConn
objCmd.Properties("Page Size")=100
objCmd.CommandText = strQuery
Set objRS = objCmd.Execute

Doing something with a single result (this will output the returned users full DN)

If objRS.RecordCount = 1 Then
WScript.Echo objRS.Fields("DistinguishedName")
End If

Doing something with multiple results (this will output each returned users full DN)

If objRS.RecordCount > 0 Then
For Each objUser in ObjRS
WScript.Echo objRS.Fields("DistinguishedName")
Next
End If
Personal tools
Support