Version 0 of ActiveDirectoy Query using Twapi COM

Updated 2017-11-06 19:54:56 by MHo
package require twapi

twapi::import_commands

 

#################

###

### Ported by MHo from VBScript: Windows Script Referenz, T.Weltner, S. 306

###

 

namespace eval adtools {

 

  proc attrFromEMail {mail attr} {

        catch {searchAD "(&(objectCategory=person)(objectClass=user)(mail=$mail))" $attr} ret

        return $ret

   }

 

   ### Parameter:

   #   LDAP-Suchfilter

   #   Liste von Attributen (durch , getrennt), die zurückgegeben werden sollen

   # Achtung: Fehler werden hier nicht abgefangen!

   #

   proc searchAD {filter return} {

 

        # ADODB-Verbindung einrichten

        set connection [comobj "ADODB.Connection"]

        $connection -set Provider "ADsDSOObject"

        $connection Open

        

        # Abfrage formulieren

        set command [comobj "ADODB.Command"]

        $command -set ActiveConnection $connection

 

        # ADsPath der Domäne ermitteln

        set rootDSE [comobj_object "LDAP://rootDSE"]

        set ADsPath [$rootDSE -call Get defaultNamingContext]

 

        # Kommando konstruieren

        set query "<LDAP://${ADsPath}>;$filter;$return;subtree"

 

        # Kommando ausführen

        $command -set CommandText $query

        set recordSet [$command Execute]

        set ret [list]

        if {[$recordSet RecordCount]} {

           while {![$recordSet EOF]} {

               # puts [$recordSet GetString]

               set d [dict create]

               set o [$recordSet Fields]

               for {set i 0} {$i < [$o Count]} {incr i} {

                   set item [$o item $i]

                   dict set d [$item Name] [$item Value]

               }

               lappend ret $d

               $recordSet MoveNext

           }

        }

        return $ret

   }

 

}

 

### Tests

if {[info exists argv0] && [file tail [info script]] eq [file tail $argv0]} {

   puts [::adtools::attrFromEMail "[email protected]" "HomeDirectory"]

   puts [::adtools::attrFromEMail "[email protected]" "HomeDirectory,cn"]

   puts [::adtools::attrFromEMail "Test.*@xyz.de" "HomeDirectory,sAMAccountName"]

   puts [::adtools::attrFromEMail "*@xyz.de" "sAMAccountName"]

}