Thursday, December 23, 2010

Enable a disabled account in AD with C#

This piece of code allows you to reenable an account programmatically using C#.  



    public void EnableDisableUser(string server, string name1, string obj1, Int32 sw)
    {


        try
        {
            this.Label1.Style["text-align"] = "left";
            Label1.ForeColor = Color.Black;


            DirectoryEntry root1 = new DirectoryEntry(@"LDAP://rootdse");
            string path1 = root1.Invoke("GET", "defaultNamingContext").ToString();


            DirectoryEntry root = new DirectoryEntry(
               "LDAP://" + path1, txtUsername.Text, txtPassword.Text);
            //OU=Computers,OU=Home,dc=ds,dc=apollo,dc=com
            DirectorySearcher searcher = new DirectorySearcher(root);


            searcher.Filter = "(&(objectClass=*)(sAMAccountName=" + obj1 + "))";




            searcher.PropertiesToLoad.Add("cn");
            searcher.PropertiesToLoad.Add("userPrincipalName");
            searcher.PropertiesToLoad.Add("sAMAccountName");
            searcher.PropertiesToLoad.Add("lockoutTime");


            if (sw == 0x200)
                Label1.Text = "Enabling User:<b> " + obj1 + "</b><br />";
            
            if (sw == 0x2)
                Label1.Text = "Disabling User:<b> " + obj1 + "</b><br />";
            
                Label1.Text += "------------------------------------------" +
                "---------------------------------- <br />";
            SearchResultCollection results = searcher.FindAll();
            foreach (SearchResult result in results)
            {
                string searchpath = result.Path;
                Console.WriteLine("path: {0}", searchpath);


                searcher.CacheResults = false;
                SearchResult result1 = searcher.FindOne();
                root = result1.GetDirectoryEntry();
                root.Properties["userAccountControl"].Value = sw;
                root.CommitChanges();


                
                ResultPropertyCollection rpc = result.Properties;
                foreach (string property in rpc.PropertyNames)
                {
                    foreach (object value in rpc[property])
                    {
                        if (property == "mail")
                        {
                            Label1.Text += "<b>" + property +
                                "</b>: <a href='mailto:" + value + "'>" + value + "</a><br />";
                        }
                        else
                        {
                            Label1.Text += "<b>" + property +
                                "</b>: " + value + "<br />";
                        }
                    }
                }


                Label1.Text += "---------------------------------------"
                + "------------------------------------- <br />";


                if (sw == 0x200)
                Label1.Text += "This account has been enabled!!!"
                    + "<br />";


                if (sw == 0x2)
                    Label1.Text += "This account has been disabled!!!"
                   + "<br />";


            
            }
        }
        catch (Exception ex)
        {
            Label1.Text += ex.Message;


        }
    }

No comments:

Post a Comment