2010-07-07 5 views
0

Как обновить список различных телефонный, 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; 
    } 

ответ

0

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

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

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

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(); 
      } 
     } 
    } 
} 

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

Смежные вопросы