Hi,
This the code i wrote to extract all the users details of an organization across domain
System.DirectoryServices.DirectorySearcher mySearcher = new System.DirectoryServices.DirectorySearcher("gc://dc=xxxdomain,dc=net");
mySearcher.Filter = ("(objectCategory=person)");
mySearcher.PageSize = int.MaxValue;
Console.WriteLine("Listing of users in the Active Directory");
Console.WriteLine("========================================");
using (var searchResultCollection = mySearcher.FindAll())
{
foreach (System.DirectoryServices.SearchResult searchResult in searchResultCollection)
{
foreach (string prop in searchResult.Properties["distinguishedname"])
{
Console.WriteLine("distinguishedname : " + prop.Trim());
break;
}
}
}
I got some output that only fetches the data for a particular domain (eg: APJ or NA or EMEA) where the user is accessing the application and not the complete data. Can anyone help me on this what went wrong in the code?
Loading
DharmarajanPosted Dec 21, 2009, 2:20 AM
Lalit MPosted Dec 21, 2009, 1:58 AM
Dim sResultText,Grps,MemberList
Dim oRootDSE, oConnection, oCommand, oRecordSet
Set oRootDSE = GetObject("LDAP://rootDSE")
Set oConnection = CreateObject("ADODB.Connection")
oConnection.Open "Provider=ADsDSOObject;"
Set objCommand = CreateObject("ADODB.Command")
objCommand.ActiveConnection = oConnection
ldstring = ";"
objCommand.CommandText=ldstring & "(objectClass=group);name,SamAccountName"
Set oRecordSet = objCommand.Execute()
Do While Not oRecordSet.EOF
sResultText = sResultText & oRecordSet.Fields("samAccountName") & vbCrLf
'WScript.Echo oRecordSet.Fields("samAccountName") & vbCrLf
MemberList=RetrieveUsers(dom,oRecordSet.Fields("samAccountName"))
'WScript.Echo Memberlist
sResultText = sResultText & memberlist & vbCrLf & "************************************" & vbCrLf
oRecordSet.MoveNext
Loop
'Wscript.Echo sResultText
Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.CreateTextFile (dom & "DomainGroupUsers.txt", ForWriting)
ts.write sResultText
MsgBox "Done"
'*****************************************************************************************
'*****************************************************************************************
Function RetrieveUsers(domainName,grpName)
dim dom
dim grp
dim GrpObj
dim mbrlist
dim mbr
'——————————————————————————-
' *** Enumerate Group Members ***
'——————————————————————————-
grp = grpName
Set objDomain = getObject("LDAP://rootDse")
domainName = objDomain.Get("dnsHostName")
' Build the ADSI query and retrieve the group object
Set GrpObj = GetObject("WinNT://" & domainName & "/" & grp & ",group")
' Loop through the group membership and build a string containing the names
for each mbr in GrpObj.Members
On error resume next
mbremail = SearchEmail(mbr.name)
If Err Then
mbrlist = mbrlist & vbTab & mbr.name & vbCrLf
Else
'if you don't want the email addresses, then copy the line 2 up to below
mbrlist = mbrlist & vbTab & mbr.name & vbTab & vbTab & mbremail+ vbCrLf
End If
Next
'The next line returns mbrlist back up to the main body
RetrieveUsers=mbrlist
End Function
Public Function SearchEmail(ByVal vSAN)
' Function: SearchDistinguishedName
' Description: Searches the DistinguishedName for a given SamAccountName
' Parameters: ByVal vSAN – The SamAccountName to search
' Returns: The DistinguishedName Name
Dim oRootDSE, oConnection, oCommand, oRecordSet
Set oRootDSE = GetObject("LDAP://rootDSE")
Set oConnection = CreateObject("ADODB.Connection")
oConnection.Open "Provider=ADsDSOObject;"
Set oCommand = CreateObject("ADODB.Command")
oCommand.ActiveConnection = oConnection
oCommand.CommandText = "
">;(&(objectCategory=User)(samAccountName=" & vSAN & "));mail;subtree"
Set oRecordSet = oCommand.Execute
On Error Resume Next
SearchEmail = oRecordSet.Fields("mail")
On Error GoTo 0
oConnection.Close
Set oRecordSet = Nothing
Set oCommand = Nothing
Set oConnection = Nothing
Set oRootDSE = Nothing
End Function