更新多个用户的属性

时间:2010-07-07 02:02:05

标签: active-directory properties

如何使用此

更新不同电话,IPPhone的列表
    static void Main(string[] args)
    {
        Console.Write("Enter userid      : "); // I would pass this in from the first 
                                               //Field in the .csv file 2439009
        String username = Console.ReadLine();

        try
        {
            DirectoryEntry myLdapConnection = createDirectoryEntry();

            DirectorySearcher search = new DirectorySearcher(myLdapConnection);
            search.Filter = "(cn=" + uid + ")";
            search.PropertiesToLoad.Add("Telephone","IPPhone");

            SearchResult result = search.FindOne();

            if (result != null)
            {
                // create new object from search result

                DirectoryEntry entryToUpdate = result.GetDirectoryEntry();

                // show existing title

                Console.WriteLine("Current title   : " + entryToUpdate.Properties["Telephone][0].ToString());
                Console.Write("\n\nEnter new title : ");

                // get new title and write to AD

                String newTitle = Console.ReadLine();

                entryToUpdate.Properties["Telephone"].Value = newTelePhone;
                entryToUpdate.Properties["IPPhone"].Value = newIPPhone;

                entryToUpdate.CommitChanges();

                Console.WriteLine("\n\n...new title saved");
            }

            else Console.WriteLine("User not found!");
        }

        catch (Exception e)
        {
            Console.WriteLine("Exception caught:\n\n" + e.ToString());
        }
    }

    static DirectoryEntry createDirectoryEntry()
    {
        // create and return new LDAP connection with desired settings

        DirectoryEntry ldapConnection = new DirectoryEntry("mydomain.dm.com");
        ldapConnection.Path = "LDAP://OU=myusers,DC=sales,DC=US,DC=US";
        ldapConnection.AuthenticationType = AuthenticationTypes.Secure;
        return ldapConnection;
    }

2 个答案:

答案 0 :(得分:0)

我猜你已经抓住别人的代码而不知道如何使用它?

您应该了解此代码可能(会?)导致严重的服务器问题,因为DirectoryEntry资源未正确关闭。

Main方法中的每个DirectoryEntry变量都应包含在using(){}语句中。

答案 1 :(得分:0)

尝试这样的事情:

您定义了一个类CSVRecord,用于保存CSV中的数据 - 使用FileHelpers读取该数据。该课程如下:

public class CSVRecord
{
    public string EmployeeNumber { get; set; }
    public string TelephoneNumber { get; set; }
    public string IPPhoneNumber { get; set; }
}

一旦你读完了那个类,就需要迭代它的元素,然后对每个元素进行更新。

CSVRecord[] listOfEmployees = (read in via FileHelpers)

// define root for searching your user accounts    
using (DirectoryEntry root = new DirectoryEntry("LDAP://dc=yourcompany,dc=com"))
{
    // set up directory searcher to find users by employeeId
    using (DirectorySearcher searcher = new DirectorySearcher(root))
    {
       searcher.SearchScope = SearchScope.Subtree;

       // iterate over all entries in your list of employees     
       foreach (CSVRecord csvEntry in listOfEmployees)
       {
           searcher.Filter = string.Format("(&(objectCategory=user)(employeeId={0}))", csvEntry.EmployeeNumber);

           // search for that employee         
           SearchResult result = searcher.FindOne();

           // if found - access the DirectoryEntry      
           if (result != null)
           {
               DirectoryEntry foundUser = result.GetDirectoryEntry();

               // update properties from values in CSV
               foundUser.Properties["telephoneNumber"].Value = csvEntry.TelephoneNumber;
               foundUser.Properties["ipPhone"].Value = csvEntry.IPPhoneNumber;

               // save changes back to directory
               foundUser.CommitChanges();
            }
        }
    }
}

这对你有用吗?

相关问题