Autor Beitrag
sunghost
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Fr 30.07.10 08:39 
Hallo,
ich bin absoluter Neuling im C# Bereich. Ich habe mich schon ein wenig eingelesen und versuche nun ein paar Infos aus dem Active Directory zu ziehen. Dafür möchte ich .Net3.5 und den Namespace DirectoryServices und .AccountManagement verwenden. Ich habe ein Codesnipe im Netz gefunden der soweit auch funktioniert, allerdings bekomme ich ihn nicht auf meine Ansprüche umgebogen. Dies liegt vermutlich an meinen fehlenden Kenntnissen in der objektorientierten Programmierung. Daher brauche ich eure erklärende Hilfe. Thx.

Verbindung mit dem AD herstellen:
ausblenden C#-Quelltext
1:
PrincipalContext currentDomain = new PrincipalContext(ContextType.Domain);					

binden der User Pricipals
ausblenden C#-Quelltext
1:
UserPrincipal userQuery = new UserPrincipal(currentDomain);					

und nun möchte ich ganz einfach die Eigenschaften des Users auslesen. Dazu kann man die Eigenschaft DisplayName verwenden. Ich weiß allerdings nicht wie ich da ansetzen muss. Mit der MSDN komme ich irgendwie noch nicht so klar. Dort steht zwar was wofür ist, aber kein wirkliches Bsp.

Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4807
Erhaltene Danke: 1061

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Fr 30.07.10 10:58 
Du meinst nicht einfach
ausblenden C#-Quelltext
1:
string displayName = userQuery.DisplayName;					

:?!?:

Der Zugriff auf Eigenschaften (Properties) bzw. Felder und Methoden sollte eigentlich eines der ersten Dinge sein, was man in einer objektorientierten Sprache wie C# lernt -)
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Fr 30.07.10 11:01 
Hallo sunghost,

Zitat:

und nun möchte ich ganz einfach die Eigenschaften des Users auslesen


Hmm, welche Eigenschaften und von welchem User denn? Von dem Benutzer, unter dessen Context die Anwendung läuft? So richtig ist nicht ersichtlich, was das Ganze dann mal werden soll.

Wäre hilfreich, wenn Du mal ein bisschen weiter ausholst.

MFG, Marko
sunghost Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Fr 30.07.10 13:37 
Hi,
so wie du es geschrieben hattest, habe ich es auch probiert. Ich vermute mal, dass ich den abzufragenden User noch angeben muss, aber nicht weis wie. Irgendwie verstehe ich nicht wie man MSDN ließt, also welche Befehle für welchen Zweck benötigt werden und welche Parameter ich angeben muss. In diesem, für mich, Verständnistest, geht es nur um das Auslesen von Eigenschaften aus dem AD. Egal ob von Benutzern oder z.b Druckern. Das Beispiel das ich gefunden hatte:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
// Connect to the current domain using the credentials of the executing user:
PrincipalContext currentDomain = new PrincipalContext(ContextType.Domain);
// Search the entire domain for users with non-expiring passwords:
UserPrincipal userQuery = new UserPrincipal(currentDomain);
userQuery.PasswordNeverExpires = true;
PrincipalSearcher searchForUser = new PrincipalSearcher(userQuery);
foreach (UserPrincipal foundUser in searchForUser.FindAll())
{
 Console.WriteLine("DistinguishedName: " + foundUser.DistinguishedName);
// To get the countryCode-attribute you need to get the underlying DirectoryEntry-object:
 DirectoryEntry foundUserDE = (DirectoryEntry)foundUser.GetUnderlyingObject();
 Console.WriteLine("Country Code: " + foundUserDE.Properties["countryCode"].Value);
 Console.Read();
 }

dies funktioniert soweit auch. allerdings verstehe ich die Bindung mit dem Principal nicht recht und versteh grad nicht wie ich das dann umsetzen kann.

Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4807
Erhaltene Danke: 1061

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Fr 30.07.10 14:29 
Wenn du nur vom aktuellen User die Daten abfragen willst, dann kannst du die statische Eigenschaft 'Current' verwenden:
ausblenden C#-Quelltext
1:
UserPrincipal user = UserPrincipal.Current;					


Ansonsten benötigst du eine bestimmte Eigenschaft des Users (z.B. SID, UserPrincipalName, SAMAccountName, o.ä.) und kannst dann in der von dir geposteten Schleife eine entsprechende if-Abfrage einbauen, z.B.
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
foreach (UserPrincipal foundUser in searchForUser.FindAll())
{
  if(foundUser.SID == userSID) // angenommen, du kennst die SID des Users
  {
    // ...
  }
}