Improve company productivity with a Business Account.Sign Up

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 389
  • Last Modified:

Store Active Directory Querry into a Multidimensional array

Essentially I want to query 2 domain controllers in AD and compare the information between the two.  I only need to be able to store the HostName and Last Login time stamp from each Domain Controller.  I would like to modify the code to return the array to the calling function.  

I----------------------------------------------------------------------------------------------------------------------
       private void Button_1_Click(object sender, EventArgs e)
        {
                string OUDN = txtTargetList_Path.Text;
                try
                {
                    DirectoryEntry entry = new DirectoryEntry("LDAP://" + OUDN);
                    DirectorySearcher DirSearch = new DirectorySearcher(entry);
                    DirSearch.Filter = "(objectClass=computer)";
                    DirSearch.PageSize = 100000;

                    foreach(SearchResult results in DirSearch.FindAll())
                    {
                        string Line = "";
                        string HName = "";
                        string LstLgn = "";
                       
                        foreach(string Value in results.Properties.PropertyNames)
                        {
                            if(results.Properties[Value]!=null)
                            {
                                if (Value == "name")
                                {
                                    HName = (string)results.Properties[Value][0];
                                }
                                if(Value == "lastlogon")
                                {
                                    long lastLogon = (long)results.Properties[Value][0];
                                    LstLgn = DateTime.FromFileTime(lastLogon).ToString();
                                }
                            }
                        }
                        Line = HName + "," + LstLgn;
                        listBox1.Items.Add(Line);
                    }
                }
                catch (IOException Iox)
                {
                    lstErrorLog.Items.Add(Iox.Data.ToString());
                }
                catch (DirectoryServicesCOMException ex)
                {
                    lstErrorLog.Items.Add(ex.Message.ToString());
                }
        }
0
Trypsim
Asked:
Trypsim
  • 2
  • 2
1 Solution
 
evilrixSenior Software Engineer (Avast)Commented:
The code below shows how to build and return an ArrayList from a function.
using System;
using System.Collections;
 
namespace clrtest
{
    // Data will represent one element in the array
    class Data
    {
        public Data(string name_, string lastlogin_)
        {
            m_name = name_;
            m_lastlogin = lastlogin_;
        }
 
        // Accessor for name
        public string Name
        {
            get
            {
                return m_name;
            }
        }
 
        // Accessor for lastlogin
        public string LastLogin
        {
            get
            {
                return m_lastlogin;
            }
        }
 
        private string m_name;
        private string m_lastlogin;
    }
 
    class Program
    {
        // Dummy function just to demonstrate how to return array
        static ArrayList foo()
        {
            // Build a dummy array
            ArrayList al = new ArrayList();
            al.Add(new Data("John Doe", "18/11/2007"));
            al.Add(new Data("Jane Smith", "18/11/2007"));
 
            // Return array
            return al;
        }
 
        static void Main(string[] args)
        {
            // foo() will return an ArrayList object
            ArrayList al = foo();
 
            // Iterate through items in ArrayList
            foreach (Object obj in al)
            {
                // Cast boxed object to Data element
                Data data = obj as Data;
 
                // IF cast was successful output the data as proof
                if (data != null)
                {
                    Console.WriteLine(data.Name);
                    Console.WriteLine(data.LastLogin);
                }
            }
        }
    }
}

Open in new window

0
 
evilrixSenior Software Engineer (Avast)Commented:
So you'd need to change your function to something like this...
private ArrayList Button_1_Click(object sender, EventArgs e)
{
        //////////////////////////////////////////////////////////////////////
        // Create new array
        ArrayList al = new ArrayList();
        //////////////////////////////////////////////////////////////////////
 
        string OUDN = txtTargetList_Path.Text;
        try
        {
            DirectoryEntry entry = new DirectoryEntry("LDAP://" + OUDN);
            DirectorySearcher DirSearch = new DirectorySearcher(entry);
            DirSearch.Filter = "(objectClass=computer)";
            DirSearch.PageSize = 100000;
 
            foreach(SearchResult results in DirSearch.FindAll())
            {
                string Line = "";
                string HName = "";
                string LstLgn = "";
                
                foreach(string Value in results.Properties.PropertyNames)
                {
                    if(results.Properties[Value]!=null)
                    {
                        if (Value == "name")
                        {
                            HName = (string)results.Properties[Value][0];
                        }
                        if(Value == "lastlogon")
                        {
                            long lastLogon = (long)results.Properties[Value][0];
                            LstLgn = DateTime.FromFileTime(lastLogon).ToString(); 
                        }
                    }
                }
                Line = HName + "," + LstLgn;
                listBox1.Items.Add(Line);
 
                //////////////////////////////////////////////////////////////
                // Add name/logintime to array
                al.Add(new Data(HName, LstLgn));
                //////////////////////////////////////////////////////////////
            }
        }
        catch (IOException Iox)
        {
            lstErrorLog.Items.Add(Iox.Data.ToString());
        }
        catch (DirectoryServicesCOMException ex)
        {
            lstErrorLog.Items.Add(ex.Message.ToString());
        }
 
        //////////////////////////////////////////////////////////////////////
        // Return array
        return al;
        //////////////////////////////////////////////////////////////////////
}

Open in new window

0
 
TrypsimAuthor Commented:
Thanks, this is exactly what I was looking for.
0
 
TrypsimAuthor Commented:
al.Add(new Data(HName, LstLgn));

Returns 3 errors when I compile it?  I think that I am missing a Library.  Can you please help with this too?

Error      1      The type or namespace name 'data' could not be found (are you missing a using directive or an assembly reference?)      C:\Documents and Settings\tcbea\Desktop\VS Projects Nathan\SITS-SQT\SITS-SQT\SQT.cs      4433      32      SITS-SQT

Thanks,
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 2
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now