protected void GetUserMembership(IADsGroup group, string userName, string propertyName, List <string> userGroups) { try { string userAccountName; string groupAccountName = String.Empty; IADsMembers membership = group.Members(); foreach (object obj in membership) { userAccountName = DirectoryServicesUtils.GetObjectAccountName((IADs)obj, propertyName); if (StringUtil.CompareIgnoreCase(userAccountName, userName)) { if (!StringUtil.IsStringInitialized(groupAccountName)) { groupAccountName = DirectoryServicesUtils.GetObjectAccountName(group, propertyName); } userGroups.Add(groupAccountName); } } } catch (Exception exc) { Log.WriteWarning("Failed to obtain user membership. Details : {0}", exc.Message); } }
protected void GetUserMembership(IADsUser user, string propertyName, List <string> userGroups) { try { IADsMembers membership = user.Groups(); foreach (IADsGroup group in membership) { userGroups.Add(DirectoryServicesUtils.GetObjectAccountName(group, propertyName)); } } catch (Exception exc) { Log.WriteWarning("Failed to obtain user membership. Details : {0}", exc.Message); } }
/* Methode zum Ermitteln aller Gruppen eines Benutzers */ public static StringCollection EnumUserGroups(string domainName, string machineName, string userName, string bindUser, string bindPassword) { // StringCollection für die ermittelten Gruppennamen StringCollection groups = new StringCollection(); // DirectoryEntry-Objekt für den Benutzer erzeugen if (domainName == null && machineName == null) { machineName = Environment.MachineName; } string adsiPath = "WinNT://" + (domainName != null ? domainName + "/" : "") + (machineName != null ? machineName + "/" : "") + userName + ",user"; DirectoryEntry userEntry = new DirectoryEntry(adsiPath, bindUser, bindPassword); try { // Gruppen dieses Benutzers einlesen IADsMembers adsMembers = (IADsMembers)userEntry.Invoke("Groups"); // Member so filtern, dass nur Group-Objekte übrig bleiben adsMembers.Filter = new object[] { "group" }; // Gruppen durchgehen foreach (IADsGroup adsGroup in adsMembers) { groups.Add(adsGroup.Name); } } finally { // ADSI-Objekt freigeben userEntry.Dispose(); } // Die ermittelten Gruppen zurückgeben return(groups); }
/* Methode zum Ermitteln aller Benutzer einer Gruppe */ public static StringCollection EnumGroupMembers(string domainName, string machineName, string groupName, string bindUser, string bindPassword) { // StringCollection für die ermittelten Benutzernamen erzeugen StringCollection users = new StringCollection(); // DirectoryEntry-Objekt für die Gruppe holen if (domainName == null && machineName == null) { machineName = Environment.MachineName; } string adsiPath = "WinNT://" + (domainName != null ? domainName + "/" : "") + (machineName != null ? machineName + "/" : "") + groupName + ",group"; DirectoryEntry groupEntry = new DirectoryEntry(adsiPath, bindUser, bindPassword); try { // Member dieser Gruppe einlesen IADsMembers adsMembers = (IADsMembers)groupEntry.Invoke("Members"); // Member so filtern, dass nur User-Objekte übrig bleiben adsMembers.Filter = new object[] { "user" }; // Benutzer durchgehen foreach (IADsUser adsUser in adsMembers) { users.Add(adsUser.Name); } } finally { // ADSI-Objekt freigeben groupEntry.Dispose(); } // Die ermittelten Benutzer zurückgeben return(users); }