SharePoint Online - Get Information Of All Sites, Web, And Lists/Libraries Using PowerShell

We often require to fetch the details of site/web/list inside site collection. So I have written the below script which will do the following task get all root sites in SharePoint Online and show its template.

We often need to fetch the details of a site/web/list inside the site collection. So, I have written the below script which will do the following tasks.
  • Get all root sites in SharePoint Online and show their templates
  • Get all webs and subwebs from root sites in SharePoint Online and show their templates
  • Get all lists from sites and webs in SharePoint Online and show the item count
  • Collect this information and store this in an HTML table
The HTML View of the table can be seen as,

HTML View of the table

Workaround
  1. First, install SharePoint Online Management Shell on your machine.
  2. After successful installation, run it as an Administrator.
  3. Save the below script as .ps1 file on your drive.
    1. #Script Start  
    2.   
    3. function connectToO365 {  
    4.     #Let the user fill in their admin url, username and password  
    5.     $adminUrl = Read - Host "Enter the Admin URL of 0365 (eg. https://<Tenant Name>-admin.sharepoint.com)"  
    6.     $userName = Read - Host "Enter the username of 0365 (eg. admin@<tenantName>.onmicrosoft.com)"  
    7.     $password = Read - Host "Please enter the password for $($userName)" - AsSecureString  
    8.     # set credentials  
    9.     $credentials = New - Object - TypeName System.Management.Automation.PSCredential - argumentlist $userName, $password  
    10.     $SPOCredentials = New - Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($userName, $password)  
    11.     # connect to to Office 365  
    12.     try {  
    13.         Connect - SPOService - Url $adminUrl - Credential $credentials  
    14.         write - host "Info: Connected succesfully to Office 365" - foregroundcolor green  
    15.     } catch {  
    16.         write - host "Error: Could not connect to Office 365" - foregroundcolor red  
    17.         Break connectToO365  
    18.     }  
    19.       #create HTML file  
    20.     $filePath = create - outputfile  
    21.       # start getting site collections  
    22.     get - siteCollections  
    23.     add - content - value " < /body> < /html>  
    24.     " -path $filePath  
    25. }  
    26.   
    27. function create - outputfile() {  
    28.   #Create unique string from the date  
    29.     $date = get - date - format dMMyyyyhhmm  
    30.     # set the full path  
    31.     $filePath = "$($PSScriptRoot)\Output$($date).html"  
    32.     #test path  
    33.     if (!(Test - Path - path $filePath)) {  
    34.       #create file  
    35.         New - Item $filePath - type file | out - null  
    36.         # print info  
    37.         write - host "File created: $($filePath)" - foregroundcolor green  
    38.         # add start HTML information to file  
    39.         add - content - value " < html > < body > < h1 > Sites information Office 365 < /h1> < table border = '1'  
    40.         style = 'font-family: Calibri, sans-serif' > < tr > < th style = 'background-color:blue; color:white' > URL < /th> < th style = 'background-color:blue; color:white' > Type < /th> < th style = 'background-color:blue; color:white' > Template < /th> < th style = 'background-color:blue; color:white' > Item Count < /th> < /tr>  
    41.         " -path $filePath  
    42.     } else {  
    43.       #break so there won 't be duplicate files  
    44.         write - host "Output file already exists, wait 1 minute" - foregroundcolor yellow  
    45.         Break create - outputfile  
    46.     }  
    47.     return $filePath  
    48. }  
    49.   
    50. function get - siteCollections {  
    51.   #Get all site collections  
    52.   # If we want to get information from only one site collection then replace the below line with $siteCollections = "Your Site Collection URL"  
    53.     $siteCollections = Get - SPOSite# loop through all site collections  
    54.     foreach($siteCollection in $siteCollections) {  
    55.       #set variable for a tab in the table  
    56.         $pixelsweb = 0  
    57.         $pixelslist = 0  
    58.         # add info to HTML document  
    59.         add - content - value "<tr style='background-color:cyan'><td>$($siteCollection.url)</td><td>TopSite</td><td>$($sitecollection.template)</td><td></td></tr>" - path $filePath  
    60.         write - host "Info: Found $($siteCollection.url)" - foregroundcolor green  
    61.         # search for webs  
    62.         $AllWebs = Get - SPOWebs($siteCollection.url)  
    63.     }  
    64. }  
    65.   
    66. function Get - SPOWebs($url) {  
    67.   #fill metadata information to the client context variable  
    68.     $context = New - Object Microsoft.SharePoint.Client.ClientContext($url)  
    69.     $context.Credentials = $SPOcredentials  
    70.     $web = $context.Web  
    71.     $context.Load($web)  
    72.     $context.Load($web.Webs)  
    73.     $context.load($web.lists)  
    74.     try {  
    75.         $context.ExecuteQuery()  
    76.         # loop through all lists in the web  
    77.         foreach($list in $web.lists) {  
    78.             add - content - value "<tr><td><span style='margin-left:$($pixelslist)px'>$($list.title)</td><td>List/library</td><td></td><td>$($list.itemcount)</td></tr>" - path $filePath  
    79.         }  
    80.       #loop through all webs in the web and start again to find more subwebs  
    81.         $pixelsweb = $pixelsweb + 15  
    82.         $pixelslist = $pixelslist + 15  
    83.         foreach($web in $web.Webs) {  
    84.             add - content - value "<tr style='background-color:yellow'><td><span style='margin-left:$($pixelsweb)px'>$($web.url)</td><td>Web</td><td>$($web.webtemplate)</td><td></td></tr>" - path $filePath  
    85.             write - host "Info: Found $($web.url)" - foregroundcolor green  
    86.             Get - SPOWebs($web.url)  
    87.         }  
    88.     } catch {  
    89.         write - host "Could not find web" - foregroundcolor red  
    90.     }  
    91. }  
    92. connectToO365  
    93.       # Script End  
  4. Paste '& "location of ps1 file"' in SharePoint Management Shell.

    location of ps1 file
We can see all the information as shown below.
 
All the information
 
Cheers!!