Ich schreibe eine LDAP-Schnittstelle, die für eine bestimmte Gruppe objectguid
eine Liste aller Benutzer in diesen Gruppen zusammen mit der Benutzer-SID zurückgeben muss.LDAP-Abfrage, um alle Benutzer in einer Gruppe zurückzugeben
Für die Gruppe objectguid
einer gegebenen Gruppe gibt der folgende Code die Benutzer in dieser Gruppe zurück. Jedoch sind sie alle in der Form ...
CN=Chad Hutchins,OU=Contractors,DC=RM,DC=LOCAL
... aber ich brauche die SID des Benutzers gegen die obige Zeichenfolge. Gibt es eine Möglichkeit, die SID eines Benutzers ausgehend von einer Gruppe zu erhalten und nach allen Benutzern in dieser Gruppe zu fragen?
using System.DirectoryServices;
public void GetUsers(Guid groupId, string domain, string username, string password)
{
var rootEntry = new DirectoryEntry("LDAP://" + domain);
rootEntry.Username = username;
rootEntry.Password = password;
var searcher = new DirectorySearcher(rootEntry);
searcher.Filter = @"(objectguid=" + ConvertGuidToOctectString(groupId) + ")";
var groupResult = searcher.FindOne();
foreach (DictionaryEntry prop in groupResult.Properties)
{
var key = (string)prop.Key;
switch (key)
{
case "member":
foreach (string name in groupResult.Properties[key])
Console.WriteLine(name);
break;
}
}
}
private string ConvertGuidToOctectString(Guid guid)
{
var byteGuid = guid.ToByteArray();
var queryGuid = string.Empty;
foreach (var b in byteGuid)
{
queryGuid += @"\" + b.ToString("x2");
}
return queryGuid;
}
Können Sie die 'AccountManagement' Klasse verwenden? Es wird sehr einfach sein, die Benutzer-SID zu erhalten. Wenn nicht, dann können Sie alle "DistinguishedName" aller Mitglieder in der Liste der Strings speichern und dann nach Benutzern anhand ihres DN suchen und dann können Sie die 'SIDs' abrufen. – smr5