private void GetExternalUsers(Office365Tenant tenant) { GetExternalUsersResults results = null; if (!string.IsNullOrEmpty(SiteUrl)) { results = tenant.GetExternalUsersForSite(SiteUrl, Position, PageSize, Filter, SortOrder); } else { results = tenant.GetExternalUsers(Position, PageSize, Filter, SortOrder); } ClientContext.Load(results, r => r.TotalUserCount, r => r.UserCollectionPosition, r => r.ExternalUserCollection.Include(u => u.DisplayName, u => u.InvitedAs, u => u.UniqueId, u => u.AcceptedAs, u => u.WhenCreated, u => u.InvitedBy)); ClientContext.ExecuteQueryRetry(); foreach (var externalUser in results.ExternalUserCollection) { if (!ShowOnlyUsersWithAcceptingAccountNotMatchInvitedAccount) { WriteObject(externalUser); } else if (!string.Equals(externalUser.InvitedAs, externalUser.AcceptedAs, System.StringComparison.OrdinalIgnoreCase)) { WriteObject(externalUser); } } }
/// <summary> /// Returns a list all external users for a given site that have at least the viewpages permission /// </summary> /// <param name="web">Tenant administration web</param> /// <param name="siteUrl">Url of the site fetch the external users for</param> /// <returns>A list of <see cref="OfficeDevPnP.Core.Entities.ExternalUserEntity"/> objects</returns> public static List <ExternalUserEntity> GetExternalUsersForSiteTenant(this Web web, Uri siteUrl) { if (siteUrl == null) { throw new ArgumentNullException("siteUrl"); } Tenant tenantAdmin = new Tenant(web.Context); Office365Tenant tenant = new Office365Tenant(web.Context); Site site = tenantAdmin.GetSiteByUrl(siteUrl.OriginalString); web = site.RootWeb; List <ExternalUserEntity> externalUsers = new List <ExternalUserEntity>(); int pageSize = 50; int position = 0; GetExternalUsersResults results = null; while (true) { results = tenant.GetExternalUsersForSite(siteUrl.OriginalString, position, pageSize, string.Empty, SortOrder.Ascending); web.Context.Load(results, r => r.UserCollectionPosition, r => r.TotalUserCount, r => r.ExternalUserCollection); web.Context.ExecuteQuery(); foreach (var externalUser in results.ExternalUserCollection) { User user = web.SiteUsers.GetByEmail(externalUser.AcceptedAs); web.Context.Load(user); web.Context.ExecuteQuery(); var permission = web.GetUserEffectivePermissions(user.LoginName); web.Context.ExecuteQuery(); var doesUserHavePermission = permission.Value.Has(PermissionKind.ViewPages); if (doesUserHavePermission) { externalUsers.Add(new ExternalUserEntity() { DisplayName = externalUser.DisplayName, AcceptedAs = externalUser.AcceptedAs, InvitedAs = externalUser.InvitedAs, InvitedBy = externalUser.InvitedBy, UniqueId = externalUser.UniqueId, WhenCreated = externalUser.WhenCreated }); } } position = results.UserCollectionPosition; if (position == -1 || position == results.TotalUserCount) { break; } } return(externalUsers); }
/// <summary> /// Query the Tenant UPS based on Site Collection /// </summary> /// <param name="siteUrl"></param> /// <param name="invitedAs"></param> /// <returns></returns> public static List <SPExternalUserEntity> CheckExternalUserForSite(this ClientContext adminContext, ITraceLogger logger, string siteUrl, string invitedAs = "") { if (siteUrl == null) { throw new ArgumentNullException("siteUrl"); } var externalUsers = new List <SPExternalUserEntity>(); int pageSize = 50; int position = 0; GetExternalUsersResults results = null; var officeTenantContext = new Office365Tenant(adminContext); while (true) { logger.LogInformation($"Checking External User with {invitedAs} at start {position} and page size {pageSize}"); results = officeTenantContext.GetExternalUsersForSite(siteUrl, position, pageSize, invitedAs, SortOrder.Ascending); adminContext.Load(results, r => r.UserCollectionPosition, r => r.TotalUserCount, r => r.ExternalUserCollection); adminContext.ExecuteQueryRetry(); foreach (ExternalUser externalUser in results.ExternalUserCollection) { externalUsers.Add(new SPExternalUserEntity() { AcceptedAs = externalUser.AcceptedAs, DisplayName = externalUser.DisplayName, InvitedAs = externalUser.InvitedAs, InvitedBy = externalUser.InvitedBy, UniqueId = externalUser.UniqueId, UserId = externalUser.UserId, WhenCreated = externalUser.WhenCreated }); } position = results.UserCollectionPosition; if (position == -1 || position == results.TotalUserCount) { break; } } return(externalUsers); }
/// <summary> /// Returns a list all external users in your tenant /// </summary> /// <param name="web">Tenant administration web</param> /// <returns>A list of <see cref="OfficeDevPnP.Core.Entities.ExternalUserEntity"/> objects</returns> public static List <ExternalUserEntity> GetExternalUsersTenant(this Web web) { Tenant tenantAdmin = new Tenant(web.Context); Office365Tenant tenant = new Office365Tenant(web.Context); List <ExternalUserEntity> externalUsers = new List <ExternalUserEntity>(); int pageSize = 50; int position = 0; GetExternalUsersResults results = null; while (true) { results = tenant.GetExternalUsers(position, pageSize, string.Empty, SortOrder.Ascending); web.Context.Load(results, r => r.UserCollectionPosition, r => r.TotalUserCount, r => r.ExternalUserCollection); web.Context.ExecuteQuery(); foreach (var externalUser in results.ExternalUserCollection) { externalUsers.Add(new ExternalUserEntity() { DisplayName = externalUser.DisplayName, AcceptedAs = externalUser.AcceptedAs, InvitedAs = externalUser.InvitedAs, InvitedBy = externalUser.InvitedBy, UniqueId = externalUser.UniqueId, WhenCreated = externalUser.WhenCreated }); } position = results.UserCollectionPosition; if (position == -1 || position == results.TotalUserCount) { break; } } return(externalUsers); }