Обновление свойств для нескольких пользователей - PullRequest
0 голосов
/ 07 июля 2010

Как мне обновить список различных телефонов, 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 голосов
/ 07 июля 2010

Попробуйте что-то вроде этого:

Вы определяете класс 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();
            }
        }
    }
}

Это работает для вас ??

0 голосов
/ 07 июля 2010

Я предполагаю, что вы взяли чужой код и не знаете, как его использовать?

Вы должны понимать, что этот код может (будет?) Вызывать серьезные проблемы с сервером, поскольку ресурсы DirectoryEntryнеправильно закрыто.

Каждая переменная DirectoryEntry в вашем методе Main должна быть заключена в оператор using(){}.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...