2010-07-07 4 views
0

Comment puis-je mettre à jour une liste des différents téléphone, IPPhone utilisant cepropriétés Mise à jour pour plusieurs utilisateurs

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

Répondre

0

Je devine que vous avez attrapé quelqu'un d'autre code et ne savent pas comment l'utiliser?

Vous devez comprendre que ce code peut (va?) Causer de graves problèmes de serveur car les ressources DirectoryEntry ne sont pas fermées correctement.

Chaque variable DirectoryEntry de votre méthode Main doit être encapsulée dans une instruction using(){}.

0

Essayez quelque chose comme ceci:

Vous définissez une classe CSVRecord qui contient vos données du CSV - lire qu'en utilisant FileHelpers. La classe ressemble à ceci:

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

Une fois que vous avez lu cette classe, vous devez itérer sur ses éléments, et faire la mise à jour pour chacun d'eux.

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

Est-ce que cela fonctionne pour vous?