Active Directory/Search for a user: Difference between revisions

From Rosetta Code
Content added Content deleted
(omit m4)
m (Fixed lang tags.)
Line 44: Line 44:
lassign $pair cn attributes
lassign $pair cn attributes
puts [dict get $attributes distinguishedName]
puts [dict get $attributes distinguishedName]
} </lang>
}</lang>


If you're bored you can also use this instead:
If you're bored you can also use this instead:
Line 55: Line 55:
=={{header|VBScript}}==
=={{header|VBScript}}==
The search string and execution of the string
The search string and execution of the string
strUsername = "TestUser"
<lang vbscript>strUsername = "TestUser"
strQuery = "<LDAP://dc=skycityauckland,dc=sceg,dc=com>;"_
strQuery = "<LDAP://dc=skycityauckland,dc=sceg,dc=com>;"_
& "(&(objectclass=*)(samaccountname=" & strUsername & "));distinguishedname;subtree"
& "(&(objectclass=*)(samaccountname=" & strUsername & "));distinguishedname;subtree"
objCmd.ActiveConnection = objConn
objCmd.ActiveConnection = objConn
objCmd.Properties("Page Size")=100
objCmd.Properties("Page Size")=100
objCmd.CommandText = strQuery
objCmd.CommandText = strQuery
Set objRS = objCmd.Execute
Set objRS = objCmd.Execute</lang>


Doing something with a single result (this will output the returned users full DN)
Doing something with a single result (this will output the returned users full DN)
If objRS.RecordCount = 1 Then
<lang vbscript>If objRS.RecordCount = 1 Then
WScript.Echo objRS.Fields("DistinguishedName")
WScript.Echo objRS.Fields("DistinguishedName")
End If
End If</lang>


Doing something with multiple results (this will output each returned users full DN)
Doing something with multiple results (this will output each returned users full DN)
If objRS.RecordCount > 0 Then
<lang vbscript>If objRS.RecordCount > 0 Then
For Each objUser in ObjRS
For Each objUser in ObjRS
WScript.Echo objRS.Fields("DistinguishedName")
WScript.Echo objRS.Fields("DistinguishedName")
Next
Next
End If
End If</lang>


{{omit from|TI-83 BASIC}} {{omit from|TI-89 BASIC}} <!-- Does not have network access. -->
{{omit from|TI-83 BASIC}} {{omit from|TI-89 BASIC}} <!-- Does not have network access. -->

Revision as of 23:06, 21 November 2009

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

Ruby

Assume AD server talks LDAP.

Library: RubyGems

<lang ruby>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')

  1. 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"</lang>

Tcl

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

This is just the basic setup. <lang tcl>set Username "TestUser" set Filter "((&objectClass=*)(sAMAccountName=$Username))" set Base "dc=skycityauckland,dc=sceg,dc=com" set Attrs distinguishedName</lang>

Now do the actual search. <lang tcl>set result [ldap::search $conn $Base $Filter $Attrs -scope subtree]</lang>

If we have only a single result its easy: <lang tcl>if {[llength $result] == 1} {

   puts [dict get [lindex $result 0 1] distinguishedName]

}</lang>

Looping over the result set to output some values. <lang tcl>foreach pair $result {

   lassign $pair cn attributes
   puts [dict get $attributes distinguishedName]

}</lang>

If you're bored you can also use this instead: <lang tcl>package require ldapx set conn [ldapx::connect $BindDN $Password] $conn traverse $Base $Filter $Attrs e {

   puts [$e get distinguishedName]

}</lang>

VBScript

The search string and execution of the string <lang vbscript>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</lang>

Doing something with a single result (this will output the returned users full DN) <lang vbscript>If objRS.RecordCount = 1 Then

 WScript.Echo objRS.Fields("DistinguishedName")

End If</lang>

Doing something with multiple results (this will output each returned users full DN) <lang vbscript>If objRS.RecordCount > 0 Then

 For Each objUser in ObjRS
   WScript.Echo objRS.Fields("DistinguishedName")
 Next

End If</lang>