SiteProperties.WebsCount property is returning zero (CSOM)

%3CLINGO-SUB%20id%3D%22lingo-sub-36595%22%20slang%3D%22en-US%22%3ESiteProperties.WebsCount%20property%20is%20returning%20zero%20(CSOM)%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-36595%22%20slang%3D%22en-US%22%3E%3CP%3EWe%20have%20a%20console%20application%20(C%23)%20that%20runs%20nightly%20to%20gather%20stats%20about%20our%20SharePoint%20Online%20environment.%20It%20has%20been%20logging%20the%20number%20of%20subsites%20we%20have%20using%20the%20SiteProperties.WebsCount%20property%20since%209%2F7%2F2015.%20Starting%20on%2012%2F20%2F2016%2C%20that%20number%20has%20come%20back%20as%20zero%20instead%20of%20the%20actual%20value%20(which%20is%207%2C400%2B).%20We%20haven't%20changed%20this%20code%20since%20late%20November%20and%20all%20of%20the%20other%20stat%20values%20we%20gather%20are%20valid.%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3EThe%20property%20is%20documented%20here%3A%20%3CA%20href%3D%22https%3A%2F%2Fmsdn.microsoft.com%2FEN-US%2Flibrary%2Fmicrosoft.online.sharepoint.tenantadministration.siteproperties.webscount.aspx%22%20target%3D%22_blank%22%20rel%3D%22noopener%20noreferrer%20noopener%20noreferrer%22%3Ehttps%3A%2F%2Fmsdn.microsoft.com%2FEN-US%2Flibrary%2Fmicrosoft.online.sharepoint.tenantadministration.siteproperties.webscount.aspx%3C%2FA%3E%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3EI%20found%20a%20PowerShell%20script%20that%20uses%20the%20same%20approach%20as%20our%20console%20application%20here%3A%20%3CA%20href%3D%22https%3A%2F%2Fgallery.technet.microsoft.com%2Foffice%2FHow-to-get-all-the-tenant-2999c21b%22%20target%3D%22_blank%22%20rel%3D%22noopener%20noreferrer%20noopener%20noreferrer%22%3Ehttps%3A%2F%2Fgallery.technet.microsoft.com%2Foffice%2FHow-to-get-all-the-tenant-2999c21b%3C%2FA%3EI've%20attached%20a%20PowerShell%20version%20of%20this%20script%20that%20pulls%20the%20specific%20property%20I'm%20referring%20to%2C%20.WebsCount.%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3EI've%20tried%20a%20couple%20of%20versions%20of%20CSOM%3A%26nbsp%3BMicrosoft.SharePointOnline.CSOM.16.1.4727.1200%20and%26nbsp%3BMicrosoft.SharePointOnline.CSOM.16.1.5903.1200%20.%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-LABS%20id%3D%22lingo-labs-36595%22%20slang%3D%22en-US%22%3E%3CLINGO-LABEL%3EDeveloper%3C%2FLINGO-LABEL%3E%3C%2FLINGO-LABS%3E%3CLINGO-SUB%20id%3D%22lingo-sub-52843%22%20slang%3D%22en-US%22%3ERe%3A%20SiteProperties.WebsCount%20property%20is%20returning%20zero%20(CSOM)%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-52843%22%20slang%3D%22en-US%22%3E%3CP%3EThe%20Microsoft%20support%20team%20created%20this%20blog%20post%20to%20document%20this%20issue%3A%26nbsp%3B%3CA%20href%3D%22https%3A%2F%2Fblogs.technet.microsoft.com%2Fsharepointdevelopersupport%2F2017%2F01%2F18%2Fhow-to-get-webscount-and-other-details-from-sharepoint-online-using-tenant-administration-api%2F%26nbsp%3B%22%20target%3D%22_blank%22%20rel%3D%22noopener%20noreferrer%20noopener%20noreferrer%22%3Ehttps%3A%2F%2Fblogs.technet.microsoft.com%2Fsharepointdevelopersupport%2F2017%2F01%2F18%2Fhow-to-get-webscount-and-other-details-from-sharepoint-online-using-tenant-administration-api%2F%3C%2FA%3E%26nbsp%3B%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-45432%22%20slang%3D%22en-US%22%3ERe%3A%20SiteProperties.WebsCount%20property%20is%20returning%20zero%20(CSOM)%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-45432%22%20slang%3D%22en-US%22%3E%3CP%3EThank%20you%20for%20confirming%20and%20for%20providing%20your%20code.%20I%20plan%20to%20something%20similar.%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-45384%22%20slang%3D%22en-US%22%3ERe%3A%20SiteProperties.WebsCount%20property%20is%20returning%20zero%20(CSOM)%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-45384%22%20slang%3D%22en-US%22%3E%3CP%3EYes%2C%20I%20did.%20%26nbsp%3BThe%20product%20group%20confirmed%20that%20this%20is%20working%20as%20expected%20(I%20asked%20them%20to%20please%20update%20the%20documentation).%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3ESeveral%20of%20these%20properties%20aren't%20populating%20(like%20they%20did%20in%20the%20past)%20because%20of%20the%20excessive%20work%20it%20takes%20to%20do%20so.%20%26nbsp%3BInstead%20of%20getting%20the%20details%20in%20one%20call%2C%20you%20have%20to%20loop%20through%20all%20of%20the%20site%20collections%20and%20get%20the%20details%20for%20each%20one.%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3EHere's%20the%20code%20that%20we%20implemented%20(C%23%20%2F%20CSOM)%3A%20%5Bwe%20use%20a%20DataTable%20to%20store%20the%20info%5D%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CPRE%3E%20%20%20%20%20%20%20%20%20%20%20%20using%20(ClientContext%20adminContext%20%3D%20new%20ClientContext(AdminSC))%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20int%20startIndex%20%3D%200%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20adminContext.Credentials%20%3D%20new%20SharePointOnlineCredentials(SCAUserName%2C%20SCAPassword)%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20tenant%20%3D%20new%20Tenant(adminContext)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20SPOSitePropertiesEnumerable%20spp%20%3D%20null%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20while%20(spp%20%3D%3D%20null%20%7C%7C%20spp.Count%20%26gt%3B%200)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20spp%20%3D%20tenant.GetSiteProperties(startIndex%2C%20true)%3B%20%2F%2Feven%20though%20details%20is%20set%20to%20true%20it%20won't%20work%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20adminContext.Load(spp)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20adminContext.ExecuteQuery()%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20foreach%20(SiteProperties%20sp%20in%20spp)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20SiteProperties%20sprops%20%3D%20tenant.GetSitePropertiesByUrl(sp.Url%2C%20true)%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20adminContext.Load(sprops)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20adminContext.ExecuteQuery()%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20DataRow%20myRow%20%3D%20dtSiteStats.NewRow()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20myRow%5B%22SiteCollectionURL%22%5D%20%3D%20sprops.Url%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20myRow%5B%22WebsCount%22%5D%20%3D%20sprops.WebsCount%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20myRow%5B%22StorageUsage%22%5D%20%3D%20sprops.StorageUsage%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20myRow%5B%22TimeZoneId%22%5D%20%3D%20sprops.TimeZoneId%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20myRow%5B%22LastContentModifiedDate%22%5D%20%3D%20sprops.LastContentModifiedDate%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2FTHESE%20NO%20LONGER%20WORK%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2FmyRow%5B%22SiteCollectionURL%22%5D%20%3D%20sp.Url%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2FmyRow%5B%22WebsCount%22%5D%20%3D%20sp.WebsCount%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2FmyRow%5B%22StorageUsage%22%5D%20%3D%20sp.StorageUsage%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2FmyRow%5B%22TimeZoneId%22%5D%20%3D%20sp.TimeZoneId%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2FmyRow%5B%22LastContentModifiedDate%22%5D%20%3D%20sp.LastContentModifiedDate%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20dtSiteStats.Rows.Add(myRow)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20startIndex%20%2B%3D%20spp.Count%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%3C%2FPRE%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-45250%22%20slang%3D%22en-US%22%3ERe%3A%20SiteProperties.WebsCount%20property%20is%20returning%20zero%20(CSOM)%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-45250%22%20slang%3D%22en-US%22%3E%3CP%3EDid%20you%20hear%20back%20from%20the%20MS%20engineer%3F%20I'm%20experiencing%20the%20same%20issue.%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-37630%22%20slang%3D%22en-US%22%3ERe%3A%20SiteProperties.WebsCount%20property%20is%20returning%20zero%20(CSOM)%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-37630%22%20slang%3D%22en-US%22%3E%3CP%3EThe%20Microsoft%20Support%20Engineer%20is%20trying%20to%20confirm%20with%20the%20product%20group%20that%20this%20was%20intentional.%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-36775%22%20slang%3D%22en-US%22%3ERe%3A%20SiteProperties.WebsCount%20property%20is%20returning%20zero%20(CSOM)%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-36775%22%20slang%3D%22en-US%22%3E%3CP%3EHi%26nbsp%3B%3CA%20href%3D%22https%3A%2F%2Ftechcommunity.microsoft.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F2387%22%20target%3D%22_blank%22%3E%40Pieter%20Veenstra%3C%2FA%3E%26nbsp%3B-%20I'm%20pretty%20sure%20it's%20not%20related%20to%20CSOM.%20%26nbsp%3BI'm%20getting%20the%20same%20results%20with%20a%20few%20versions%20of%20CSOM.%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3EThe%20Microsoft%20Support%20Engineer%20I'm%20working%20with%20has%20been%20able%20to%20reproduce%20the%20issue.%20%26nbsp%3BHe%20suggested%20using%20the%20%22GetSitePropertiesByUrl%22%20method.%20%26nbsp%3BHowever%2C%20I%20did%20some%20testing%20and%20the%20data%20returned%20from%20the%20%22GetSiteProperties%22%20method%20does%20not%20match%20the%20data%20returned%20from%20the%20%22GetSitePropertiesByUrl%22%20method%20for%20the%20same%20site%20collection.%20%26nbsp%3B(TimeZoneID%2C%20WebsCount%2C%20StorageUsage%2C%20LastContentModifiedDate)%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3EHe's%20working%20to%20get%20confirmation%20from%20the%20product%20group%20that%20this%20is%20expected%20behavior%20or%20not.%20%26nbsp%3BI%20don't%20see%20how%20this%20can%20be%20anything%20other%20than%20a%20bug.%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-36771%22%20slang%3D%22en-US%22%3ERe%3A%20SiteProperties.WebsCount%20property%20is%20returning%20zero%20(CSOM)%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-36771%22%20slang%3D%22en-US%22%3E%3CP%3EHi%26nbsp%3B%3CA%20href%3D%22https%3A%2F%2Ftechcommunity.microsoft.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F1273%22%20target%3D%22_blank%22%3E%40Kelly%20Jones%3C%2FA%3E%2C%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3EI've%20tried%20the%20same%20with%26nbsp%3B%3CSPAN%3EMicrosoft.SharePointOnline.CSOM.16.1.5903.1200%20and%20it%20seems%20to%20be%20working%20without%20any%20problem%20so%20I%20don't%20think%20that%20this%20is%20related%20to%20the%20version%20of%20your%20CSOM%20version.%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%3CSPAN%3ECould%20this%20be%20related%20to%20permissions%3F%20or%20an%20account%20being%20locked%20out%3F%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%3CSPAN%3E%26nbsp%3B%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3C%2FLINGO-BODY%3E
Highlighted
Frequent Contributor

We have a console application (C#) that runs nightly to gather stats about our SharePoint Online environment. It has been logging the number of subsites we have using the SiteProperties.WebsCount property since 9/7/2015. Starting on 12/20/2016, that number has come back as zero instead of the actual value (which is 7,400+). We haven't changed this code since late November and all of the other stat values we gather are valid.

 

The property is documented here: https://msdn.microsoft.com/EN-US/library/microsoft.online.sharepoint.tenantadministration.siteproper...

 

I found a PowerShell script that uses the same approach as our console application here: https://gallery.technet.microsoft.com/office/How-to-get-all-the-tenant-2999c21b I've attached a PowerShell version of this script that pulls the specific property I'm referring to, .WebsCount.

 

I've tried a couple of versions of CSOM: Microsoft.SharePointOnline.CSOM.16.1.4727.1200 and Microsoft.SharePointOnline.CSOM.16.1.5903.1200 .

7 Replies
Highlighted

Hi @Kelly Jones,

 

I've tried the same with Microsoft.SharePointOnline.CSOM.16.1.5903.1200 and it seems to be working without any problem so I don't think that this is related to the version of your CSOM version.

 

Could this be related to permissions? or an account being locked out?

 

 

 

Highlighted

Hi @Pieter Veenstra - I'm pretty sure it's not related to CSOM.  I'm getting the same results with a few versions of CSOM.

 

The Microsoft Support Engineer I'm working with has been able to reproduce the issue.  He suggested using the "GetSitePropertiesByUrl" method.  However, I did some testing and the data returned from the "GetSiteProperties" method does not match the data returned from the "GetSitePropertiesByUrl" method for the same site collection.  (TimeZoneID, WebsCount, StorageUsage, LastContentModifiedDate)

 

He's working to get confirmation from the product group that this is expected behavior or not.  I don't see how this can be anything other than a bug.

Highlighted

The Microsoft Support Engineer is trying to confirm with the product group that this was intentional.

Highlighted

Did you hear back from the MS engineer? I'm experiencing the same issue.

Highlighted

Yes, I did.  The product group confirmed that this is working as expected (I asked them to please update the documentation).

 

Several of these properties aren't populating (like they did in the past) because of the excessive work it takes to do so.  Instead of getting the details in one call, you have to loop through all of the site collections and get the details for each one.

 

Here's the code that we implemented (C# / CSOM): [we use a DataTable to store the info]

 

            using (ClientContext adminContext = new ClientContext(AdminSC))
            {
                int startIndex = 0;
                adminContext.Credentials = new SharePointOnlineCredentials(SCAUserName, SCAPassword);

                var tenant = new Tenant(adminContext);
                SPOSitePropertiesEnumerable spp = null;

                while (spp == null || spp.Count > 0)
                {
                    spp = tenant.GetSiteProperties(startIndex, true); //even though details is set to true it won't work
                    adminContext.Load(spp);
                    adminContext.ExecuteQuery();

                    foreach (SiteProperties sp in spp)
                    {

                        SiteProperties sprops = tenant.GetSitePropertiesByUrl(sp.Url, true);

                        adminContext.Load(sprops);
                        adminContext.ExecuteQuery();

                        DataRow myRow = dtSiteStats.NewRow();
                        myRow["SiteCollectionURL"] = sprops.Url;
                        myRow["WebsCount"] = sprops.WebsCount;
                        myRow["StorageUsage"] = sprops.StorageUsage;
                        myRow["TimeZoneId"] = sprops.TimeZoneId;
                        myRow["LastContentModifiedDate"] = sprops.LastContentModifiedDate;

                        //THESE NO LONGER WORK
                        //myRow["SiteCollectionURL"] = sp.Url;
                        //myRow["WebsCount"] = sp.WebsCount;
                        //myRow["StorageUsage"] = sp.StorageUsage;
                        //myRow["TimeZoneId"] = sp.TimeZoneId;
                        //myRow["LastContentModifiedDate"] = sp.LastContentModifiedDate;

                        dtSiteStats.Rows.Add(myRow);
                    }

                    startIndex += spp.Count;
                }
            }

 

Highlighted

Thank you for confirming and for providing your code. I plan to something similar.

Highlighted