Site Directory is a site for listing and categorizing important sites in your organization that includes different views for categorized sites, top sites, and a site map. You may be facing with the requirement to provide a site directory of your Office 365 tenant. This can be easily achieved with the PNP PowerShell script below. Before you are running the script make sure that the pre-requisites are met.

Pre-requisites:

  1. Install PnP PowerShell Currently, the latest build is March 2018 (2.24.1803.0).
    You can check the latest module here: https://github.com/SharePoint/PnP-PowerShell/releases
  2. The account running the script must have at least SharePoint Admin role.

Site Directory Script:

[code language=”ps”]
$tenantAdministrator = # replace with SharePoint admin role account
$tenant = ((New-Object "System.Net.Mail.MailAddress" -ArgumentList $tenantAdministrator).Host).replace(".onmicrosoft.com", ”)
Write-Host "*******************************************************************************************************************"
$tenantPass = Read-Host -Prompt ("$(Get-Date -Format ‘yyyy.MM.dd HH:mm:ss’) Provide password for {0}" -f $tenantAdministrator) -AsSecureString
Write-Host "*******************************************************************************************************************"
$tenantURL = "https://{0}.sharepoint.com" -f $tenant
$tenantAdminURL = "https://{0}-admin.sharepoint.com" -f $tenant
$tenantPNPCredentials = new-object -typename System.Management.Automation.PSCredential -argumentlist $tenantAdministrator, $tenantPass

################################# Connection ######################################
Connect-PnPOnline -Url $tenantAdminURL -Credentials $tenantPNPCredentials
$siteDirectory = @()
$allSites = Get-PnPTenantSite

foreach($site in $allSites)
{
Write-Host "Connecting to $($site.Url)" -Foregroundcolor Green
Connect-PnpOnline -Url $site.Url -Credentials $tenantPNPCredentials -Erroraction SilentlyContinue
Write-Host $Error[0].Exception.Message -Foregroundcolor Red
$Error.Clear()
$rootWeb = Get-PnpWeb -Includes WebTemplate
Connect-PnpOnline -Url $site.Url -Credentials $tenantPNPCredentials
$rootLists = Get-PnPList -Includes BaseTemplate, ItemCount
foreach($list in $rootLists)
{
$siteDirectory += New-Object PSObject -property @{
SiteCollectionTitle = $site.Title
SiteCollectionUrl = $site.Url
SiteCollectionTemplate = $site.Template
WebTitle = $rootWeb.Title
WebUrl = $rootWeb.Url
WebTemplate = $rootWeb.WebTemplate
ListTitle = $list.Title
ListUrl = $list.RootFolder.ServerRelativeUrl
ListTemplate = $list.BaseTemplate
ListItemCount = $list.ItemCount
}
Write-Host $site.Title $rootWeb.Title $list.Title -ForegroundColor Yellow
}

$allWebs = Get-PnPSubWebs -Recurse -Includes WebTemplate
foreach($web in $allWebs)
{
Connect-PnpOnline -Url $web.Url -Credentials $tenantPNPCredentials
$allLists = Get-PnpList -Includes BaseTemplate, ItemCount
foreach($list in $allLists)
{
$siteDirectory += New-Object PSObject -property @{
SiteCollectionTitle = $site.Title
SiteCollectionUrl = $site.Url
SiteCollectionTemplate = $site.Template
WebTitle = $web.Title
WebUrl = $web.Url
WebTemplate = $web.WebTemplate
ListTitle = $list.Title
ListUrl = $list.RootFolder.ServerRelativeUrl
ListTemplate = $list.BaseTemplate
ListItemCount = $list.ItemCount
}
Write-Host $site.Title $web.Title $list.Title
}
}
}

$siteDirectory | Select-Object SiteCollectionTitle, SiteCollectionUrl, SiteCollectionTemplate, WebTitle, WebTemplate, WebUrl, ListTitle, ListUrl, ListTemplate, ListItemCount | Export-Csv -NoTypeInformation .\SitesDirectory-$tenant-$(Get-Date -Format "yyyy-MM-dd").csv -Force
[/code]

The script will generate a CSV file in the same folder as the script, with the following headers and information:

The CSV will contain information about each list item count. Also, it contains the system list – they can be excluded if needed.

Further, Excel Pivot feature can be used to extract information or create beautiful charts.

 

A list with the list base templates codes can be found here:

A list with web templates codes can be found here:

https://social.technet.microsoft.com/wiki/contents/articles/33939.sharepoint-server-2016-rtm-list-of-all-templates.aspx

  • GROUP#0 corresponds to Modern Team Sites
  • SITEPAGEPUBLISHING#0 corresponds to Communication Sites