2016-08-04 4 views
0

Ich muss Informationen von AD erhalten, zum Beispiel mit einer Liste mit IDs. Der folgende Code muss lesen, listet Wert auf, notieren Sie, was damit verbunden ist (Name, Mail, Organisation etc.) und speichern Sie ihn in einer anderen Liste. Hier ist das, was ich bisher geschrieben:Wie Werte von ID (wie Name usw. aus Active Directory) an Liste übergeben und in einer anderen Liste (C#) speichern?

static void Main(string[] args) 
    { 
     PrincipalContext domainContext = new PrincipalContext(ContextType.Domain, null); 
     UserPrincipal user = new UserPrincipal(domainContext); 
     List<string>id = new List<string>(); 
     id.Add("someid"); 
     id.Add("someid"); 
     id.Add("someid"); 
     user.Name = id[2]; 
     Console.ReadLine(); 
     PrincipalSearcher pS = new PrincipalSearcher(); 
     pS.QueryFilter = user; 
     PrincipalSearchResult<Principal> results = pS.FindAll(); 
     Principal pc = results.ToList()[0]; 
     DirectoryEntry de = (DirectoryEntry)pc.GetUnderlyingObject(); 
     var userData = new Data(); 
     userData.ID = de.Properties["samAccountName"].Value.ToString(); 
     userData.name = de.Properties["givenName"].Value.ToString(); 
     userData.lastName = de.Properties["sn"].Value.ToString(); 
     userData.mail = de.Properties["mail"].Value.ToString(); 
     userData.organization = de.Properties["extensionAttribute2"].Value.ToString(); 
     List<Data> d = new List<Data>(); 
     d.Add(userData); 

Und die Klasse Daten:

public class Data 
    { 

     public string name { get; set; } 
     public string lastName { get; set; } 
     public string mail { get; set; } 
     public string ID { get; set; } 
     public string organization { get; set; } 
     //public Data() { } 
    } 
} 

ich nicht wirklich mit der Lösung kommen - wie die Werte zu übergeben und speichern.

+0

Funktioniert der vorhandene Code, um zu erhalten, was Sie aus Active Directory benötigen? Und wenn Sie sagen, dass Sie zu einer anderen Liste übergehen, scheint es, dass Sie das bereits mit Ihren List of Data-Objekten tun. Wo müssen Sie die Werte weitergeben? –

+0

Können Sie tatsächlich Daten von AD lesen? Wenn ja, wo genau möchten Sie die Daten speichern? Versucht, AD selbst zu aktualisieren oder was? – uTeisT

+0

Hallo, der Code funktioniert korrekt für eine ID (zum Beispiel wenn ich userName = "idnumber" schreibe, und die foreach-Schleife). Das Problem ist, ich weiß nicht, wie man das gleiche für 3 oder 4 IDs in einer Liste tut. Die Werte müssen schließlich an eine andere Liste (d in meinem Beispiel) übergeben und gespeichert werden. – Kuba

Antwort

0

Nun, ich hoffe, ich habe das Problem richtig verstanden. Erwägen Sie haben Ihren Code richtig für 1 Benutzer arbeiten und andere Benutzer zu der Liste hinzufügen müssen hier, was Sie brauchen:

 List<string> idList = new List<string>(); 
     idList.Add("someid"); 
     idList.Add("someid"); 
     idList.Add("someid"); 
     List<Data> d = new List<Data>(); 
     foreach (string id in idList) 
     { 
      user.Name = id; 
      PrincipalSearcher pS = new PrincipalSearcher(); 
      pS.QueryFilter = user; 
      PrincipalSearchResult<Principal> results = pS.FindAll(); 
      Principal pc = results.ToList()[0]; 
      DirectoryEntry de = (DirectoryEntry)pc.GetUnderlyingObject(); 
      var userData = new Data(); 
      userData.ID = de.Properties["samAccountName"].Value.ToString(); 
      userData.name = de.Properties["givenName"].Value.ToString(); 
      userData.lastName = de.Properties["sn"].Value.ToString(); 
      userData.mail = de.Properties["mail"].Value.ToString(); 
      userData.organization = de.Properties["extensionAttribute2"].Value.ToString(); 
      d.Add(userData); 
     } 

Grundsätzlich Sie nur eine Schleife durch jede ID in Ihrem -bis created- idlist sein, zuteilen Jede id es zu user.Name, machen Sie Ihre üblichen AD Sachen und fügen Sie schließlich jedes userData zur Datenliste hinzu.

+0

Ok, die Lösung war eine Methode zu erstellen: 'öffentliche statische Liste listConvert (Liste IDList)' und dann direkt nach der Schleife d zurückgeben. – Kuba

+0

Und wie genau unterscheidet sich das von meinem Vorschlag, außer es in eine Methode zu setzen? In meiner Antwort haben Sie am Ende die Liste 'd', die alle Daten enthält, die Sie sowieso brauchen. – uTeisT

+0

Es unterscheidet sich nicht, Sie müssen nur diesen Code in Methode und das ist alles. Aber ich brauchte eine Weile, um es zu verstehen und es richtig funktionieren zu lassen. Wie auch immer, danke für deine Hilfe @uteist! – Kuba

Verwandte Themen