/// <summary>
        ///     Processes the "member" property of groups and converts the resulting list of distinguishednames to TypedPrincipals
        /// </summary>
        /// <param name="distinguishedName"></param>
        /// <param name="members"></param>
        /// <param name="objectName"></param>
        /// <returns></returns>
        public IEnumerable <TypedPrincipal> ReadGroupMembers(string distinguishedName, string[] members,
                                                             string objectName = "")
        {
            // If our returned array has a length of 0, one of two things is happening
            // The first possibility we'll look at is we need to use ranged retrieval, because AD will not return
            // more than a certain number of items. If we get nothing back from this, then the group is empty
            if (members.Length == 0)
            {
                _log.LogTrace("Member property for {ObjectName} is empty, trying range retrieval",
                              objectName);
                foreach (var member in _utils.DoRangedRetrieval(distinguishedName, "member"))
                {
                    _log.LogTrace("Got member {DN} for {ObjectName} from ranged retrieval", member, objectName);
                    var res = _utils.ResolveDistinguishedName(member);

                    if (res == null)
                    {
                        yield return new TypedPrincipal
                               {
                                   ObjectIdentifier = member.ToUpper(),
                                   ObjectType       = Label.Base
                               }
                    }
                    ;
                    else
                    {
                        yield return(res);
                    }
                }
            }
            else
            {
                //If we're here, we just read the data directly and life is good
                foreach (var member in members)
                {
                    _log.LogTrace("Got member {DN} for {ObjectName}", member, objectName);
                    var res = _utils.ResolveDistinguishedName(member);

                    if (res == null)
                    {
                        yield return new TypedPrincipal
                               {
                                   ObjectIdentifier = member.ToUpper(),
                                   ObjectType       = Label.Base
                               }
                    }
                    ;
                    else
                    {
                        yield return(res);
                    }
                }
            }
        }