Scan libraries for webhook and export to csv
Scanning document libraries and reporting on those that contains 1 or more webhooks
Summary
As part of the the pre migration assessment, it is important to identify all libraries that have webhooks configured. This script will scan all libraries in a site collection and export the libraries that have webhooks configured to a csv file.

#use this function to get the sites you want to check
function GetSitesToCheck
{
#$allsites = Get-PnPTenantSite -Connection $adminConn -Filter "Url -like 'https://contoso.sharepoint.com/'" -ErrorAction Stop
$allsites = Get-PnPTenantSite -Connection $adminConn -ErrorAction Stop
return $allsites
}
$adminUrl = "https://contoso-admin.sharepoint.com"
$PnPClientId = "Your PnP Client ID"
$adminConn = Connect-PnPOnline -Url $adminUrl -Interactive -ClientId $PnPClientId
$outputPath = "C:\temp\"
$sites = GetSitesToCheck
$output = @()
foreach ($site in $sites)
{
$siteUrl = $site.Url
$siteConn = Connect-PnPOnline -Url $siteUrl -Interactive -ClientId $PnPClientId
$libraries = Get-PnPList | Where-Object {$_.BaseType -eq "DocumentLibrary"}
foreach ($library in $libraries)
{
$webhooks = Get-PnPWebhookSubscription -List $library.Title
foreach ($webhook in $webhooks)
{
Write-Host "Library $($library.Title) in site $($site.Title) has $($webhooks.Count) webhooks"
$output += [PSCustomObject]@{
SiteUrl = $siteUrl
SiteTitle = $site.Title
LibraryTitle = $library.Title
WebhookId = $webhook.Id
WebhookExpirationDateTime = $webhook.ExpirationDateTime
WebhookNotificationUrl = $webhook.NotificationUrl
WebhookResource = $webhook.Resource
WebhookClientState = $webhook.ClientState
}
}
}
}
$output | Export-Csv -Path "$outputPath\Webhooks.csv" -Encoding utf8BOM -Delimiter "|" -Force;
Contributors
| Author(s) |
|---|
| Kasper Larsen |
Disclaimer
THESE SAMPLES ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.
Tool documentation & references
- Want to learn more about PnP PowerShell and the cmdlets
Check out the PnP PowerShell site to get started and for the reference to the cmdlets.