Hi all,
Can someone help about this problem :
I have a datatable in a datagridview, I want to search the username from the mail address.
I'm able to find what I need if my datatable have only users in a single domain but if I have 2 mail addresses with 2 different domains I have only records from the last line.
I do not know how to recurse the search for each line and pass the searchroot property according to the value of User_LDAP_Mail column
I hope I'm clear...
here is my function :
Function LDAPSearchUserNameViaMailAddress
{
$DataGrid.Name = $MyInvocation.MyCommand
AddRemoveColumns -TableType $DataGrid.Name
# Build LDAP Query with the mail address #
[String]$ldapQuery = "(&(objectCategory=user)(|"
$data = $global:dt.Rows | Where {(($_.User_LDAP_Mail -ne "") -and ($_.User_LDAP_Mail -ne $null) -and ($_.User_LDAP_Mail -ne [System.DBNull]::Value))}
$data | % {
$ldapQuery = $ldapQuery + "(mail=" + $_.User_LDAP_Mail + ")"
if ($_.User_LDAP_Mail -match "@domain1.com") {$SearchRoot = "LDAP://dc=domain1,dc=forest,dc=com"}
else { $SearchRoot = "LDAP://dc=domain2,dc=forest,dc=com"}
}
$ldapQuery = $ldapQuery + "))"
if ($data -ne $null)
{
$data.item |Get-Member -Verbose |Out-GridView -Title "data"
$de = new-object system.directoryservices.directoryentry($SearchRoot)
$ads = new-object system.directoryservices.directorysearcher -argumentlist $de,$ldapQuery
$ads.PageSize=1000
$complist = $ads.findall()
$complist | % {
#$_.properties.name; $_.Path
$adsresult = $_
$global:dt.Rows | Where {$_.User_LDAP_Mail -eq $adsresult.properties.mail} | % {
$dtrow = $_
$dtrow.UserName = $adsresult.properties.samaccountname[0]
$dtrow.User_LDAP_Name = $adsresult.properties.name[0]
$dtrow.User_LDAP_Mail = $adsresult.properties.mail[0]
#$dtrow.User_LDAP_DN = $adsresult.Path
[String]$str_LDAP_DN = $adsresult.Path
$dtrow.User_OU = $str_LDAP_DN.Substring($str_LDAP_DN.IndexOf("OU="))
}
}
}
}Thanks