Azure functions 使用CSOM将租户管理员添加到office 365中的sharepoint modern站点时出现问题

Azure functions 使用CSOM将租户管理员添加到office 365中的sharepoint modern站点时出现问题,azure-functions,sharepoint-online,Azure Functions,Sharepoint Online,我们有一个要求,为此我们正在创建一个自动化流程,以使用azure功能和租户管理凭据获取站点所有者/站点所有者组成员。然而,很少有秘密网站的租户管理员没有访问权限。计划是在站点管理员获取站点所有者信息时将租户管理员添加到站点集合,然后从这些站点删除租户管理员的权限。我从链接中找到了一段代码,用于在网站集中添加租户管理员 using (ClientContext clientContext = new ClientContext("https://testtenant-admin.shar

我们有一个要求,为此我们正在创建一个自动化流程,以使用azure功能和租户管理凭据获取站点所有者/站点所有者组成员。然而,很少有秘密网站的租户管理员没有访问权限。计划是在站点管理员获取站点所有者信息时将租户管理员添加到站点集合,然后从这些站点删除租户管理员的权限。我从链接中找到了一段代码,用于在网站集中添加租户管理员

using (ClientContext clientContext = new ClientContext("https://testtenant-admin.sharepoint.com"))
            {
                clientContext.Credentials = new SharePointOnlineCredentials(userMail, password);
                var tenant = new Tenant(clientContext);
                List<string> siteCollList = new List<string>();
                int startIndex = 0;
                SPOSitePropertiesEnumerable siteProperties;
                do
                {
                    //Get urls of site collections in the tenant in batches of 300 (Does not include the OneDrive for Business sites)
                    siteProperties = tenant.GetSiteProperties(startIndex, false);
                    clientContext.Load(siteProperties, siteProps => siteProps.Include(site => site.Url));
                    clientContext.ExecuteQuery();
                    
                    //Iterate the site collectio urls
                    foreach (var siteProperty in siteProperties)
                    {
                        
                        try
                        {
                            siteCollList.Add(siteProperty.Url);
                            if (siteProperty.Url.Contains(@"https://testtenant.sharepoint.com/sites/GetSiteOwnerSite"))
                            {
                                //assign the specified user (current user in this case) as the site collection admin. 
                                tenant.SetSiteAdmin(siteProperty.Url, "amteam@testtenant.com", true);
                                

                                clientContext.ExecuteQuery();

                                System.Console.WriteLine(siteProperty.Url);
                            }
                        }
                        catch (Exception ex)
                        {
                            System.Console.WriteLine("Error on: " + siteProperty.Url + " " + ex.Message);
                        }
                    }

                    startIndex += 300;

                } while (siteProperties.Count >= 300);
            }
使用(ClientContext ClientContext=new ClientContext(“https://testtenant-admin.sharepoint.com"))
{
Credentials=新的SharePointOnlineCredentials(用户邮件、密码);
var-tenant=新租户(clientContext);
List siteCollList=新列表();
int startIndex=0;
SpoSiteProperties可计算的siteProperties;
做
{
//以300个批量获取租户中网站集的URL(不包括OneDrive for Business sites)
siteProperties=tenant.GetSiteProperties(startIndex,false);
Load(siteProperties,siteProps=>siteProps.Include(site=>site.Url));
clientContext.ExecuteQuery();
//迭代站点集合URL
foreach(siteProperties中的SiteVar siteProperty)
{
尝试
{
添加(siteProperty.Url);
如果(siteProperty.Url.Contains)(@)https://testtenant.sharepoint.com/sites/GetSiteOwnerSite"))
{
//指定指定的用户(本例中为当前用户)作为网站集管理员。
tenant.SetSiteAdmin(siteProperty.Url,“amteam@testtenant.com“,对);
clientContext.ExecuteQuery();
System.Console.WriteLine(siteProperty.Url);
}
}
捕获(例外情况除外)
{
System.Console.WriteLine(“错误在:+siteProperty.Url+”“+ex.Message上”);
}
}
startIndex+=300;
}而(siteProperties.Count>=300);
}
我面临的问题是siteProperties=tenant.GetSiteProperties(startIndex,false)由于某种原因只为我提供了经典站点而不是现代站点,因此我无法添加tenant admin


这是预期的行为吗。即使租户管理员没有访问特定网站的权限,我如何将租户管理员添加到任何网站集。使用UI,可以通过管理中心将租户管理员添加到网站集。

您可以尝试以下操作以获取租户中的所有网站集:

 var siteurl = "https://tenant-admin.sharepoint.com"  // Tenant site!
  List AllSiteList = Context.Web.Lists.GetByTitle("DO_NOT_DELETE_SPLIST_TENANTADMIN_AGGREGATED_SITECOLLECTIONS");
  ListItemCollection AllSiteItems = AllSiteList.GetItems(CamlQuery.CreateAllItemsQuery());
                    
  Context.Load(AllSiteItems);
  Context.ExecuteQuery();