Active Directory/Search for a user
From Rosetta Code
Active Directory/Search for a user
You are encouraged to solve this task according to the task description, using any language you may know.
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

