SharePoint Online: Disable Alerts using PowerShell
Requirement: Disable Alerts in SharePoint Online!
How to disable alerts in SharePoint Online?
Ever wanted to disable alerts for a SharePoint Online list or library temporarily? Especially the ones with workflows or event receivers deployed – because adding items may trigger alert Emails? Well, there is no way to disable alerts from the SharePoint Online user interface. (You can delete alerts, however!). But there’s good news: you can disable alerts using PowerShell! This blog post will show you how to Disable Alerts in SharePoint Online using PowerShell.
PowerShell to Disable All Alerts of a User:
SharePoint Online allows users to set up alerts on lists, libraries, and other objects to receive notifications when they are updated. However, sometimes you may need to disable alerts for a specific list, library, or site. In this article, let’s look at how to disable alerts in SharePoint Online.
Let’s disable all alerts of a particular user in a given web – SharePoint Alerts are scoped at web object!
#Load SharePoint CSOM Assemblies
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"
#Config Parameters
$SiteURL= "https://crescent.sharepoint.com"
$UserID="Salaudeen@Crescent.com"
#Setup Credentials to connect
$Cred = Get-Credential
$Cred = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.UserName,$Cred.Password)
Try {
#Setup the context
$Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
$Ctx.Credentials = $Cred
#Get All Alerts of the User
$User = $Ctx.Web.EnsureUser($UserID)
$Ctx.Load($User)
$Ctx.Load($User.Alerts)
$Ctx.ExecuteQuery()
#Loop through each alert
Write-host "Total Alerts Found:"$User.Alerts.Count
ForEach($Alert in $User.Alerts)
{
#Check the Alert Status
If($Alert.Status -ne "Off")
{
#Disable the Alert
$Alert.Status="Off"
$Alert.UpdateAlert()
$Ctx.ExecuteQuery()
Write-host -f Green "Alert '$($Alert.Title)' is disabled on $($Alert.AlertType)"
}
Else
{
Write-host -f Yellow "Alert '$($Alert.Title)' is already disabled on $($Alert.AlertType)!"
}
}
}
Catch {
write-host -f Red "Error Disabling User Alerts!" $_.Exception.Message
}
To Turn ON the Alert back, use the following:
ForEach($Alert in $User.Alerts)
{
#Check the Alert Status
If($Alert.Status -eq "Off")
{
#Enable the Alert
$Alert.Status="On"
$Alert.UpdateAlert()
$Ctx.ExecuteQuery()
Write-host -f Green "Alert '$($Alert.Title)' is Enabled on $($Alert.AlertType)"
}
Else
{
Write-host -f Yellow "Alert '$($Alert.Title)' is already Enabled on $($Alert.AlertType)!"
}
}
Turn-Off All Alerts of a Specific List in SharePoint Online
Here is the PowerShell to disable alerts created in a specific list or document library in SharePoint Online:
#Load SharePoint CSOM Assemblies
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"
#Config Parameters
$SiteURL= "https://crescent.sharepoint.com/Sites/Marketing"
$ListName="Documents"
#Setup Credentials to connect
$Cred = Get-Credential
$Cred = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.UserName,$Cred.Password)
Try {
#Setup the context
$Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
$Ctx.Credentials = $Cred
#Get All Alerts from the Web
$Web = $Ctx.Web
$WebAlerts = $Web.Alerts
$List = $Ctx.Web.Lists.GetByTitle($ListName)
$Ctx.Load($Web)
$Ctx.Load($WebAlerts)
$Ctx.Load($List)
$Ctx.ExecuteQuery()
#Loop through each alert of the web and get List alerts
ForEach($Alert in $webAlerts)
{
#Get the List and User of the Alert
$Ctx.Load($Alert.User)
$Ctx.Load($Alert.List)
$Ctx.ExecuteQuery()
$AlertUser = $Alert.user.Title
#Filter the specific List Alerts from web alerts
If($Alert.List.ID -eq $List.ID)
{
#Check the Alert Status
If ($Alert.Status -ne "Off")
{
#Disable the Alert
$Alert.Status="Off"
$Alert.UpdateAlert()
$Ctx.ExecuteQuery()
Write-host -f Green "Alert '$($Alert.Title)' of '$($AlertUser)' is disabled on $($List.Title)!"
}
Else
{
Write-host -f Yellow "Alert '$($Alert.Title)' of '$($AlertUser)' is already disabled on $($List.Title)!"
}
}
}
}
Catch {
write-host -f Red "Error Disabling Alerts!" $_.Exception.Message
}
PowerShell to Disable All Alerts from a Web:
To disable alerts of all users in a specific web, use this PowerShell script.
#Load SharePoint CSOM Assemblies
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"
#Config Parameters
$SiteURL= "https://crescent.sharepoint.com"
#Setup Credentials to connect
$Cred = Get-Credential
$Cred = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.UserName,$Cred.Password)
Try {
#Setup the context
$Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
$Ctx.Credentials = $Cred
#Get All Alerts of the Web
$Web = $Ctx.Web
$Ctx.Load($Web)
$Ctx.Load($Web.Alerts)
$Ctx.ExecuteQuery()
#Loop through each alert
Write-host "Total Alerts Found:"$Web.Alerts.Count
ForEach($Alert in $Web.Alerts)
{
#Get the User
$Ctx.Load($Alert.User)
$Ctx.ExecuteQuery()
$AlertUser = $Alert.user.Title
#Check the Alert Status
If($Alert.Status -ne "Off")
{
#Disable the Alert
$Alert.Status="Off"
$Alert.UpdateAlert()
$Ctx.ExecuteQuery()
Write-host -f Green "Alert '$($Alert.Title)' of '$($AlertUser)' is disabled on $($Alert.AlertType)!"
}
Else
{
Write-host -f Yellow "Alert '$($Alert.Title)' of '$($AlertUser)' is already disabled on $($Alert.AlertType)!"
}
}
}
Catch {
write-host -f Red "Error Disabling Alerts!" $_.Exception.Message
}
If you want to delete alerts, you can use: SharePoint Online Delete Alerts using PowerShell
will this work for On Prem? or online
This script is written for SharePoint Online. For SharePoint On-premises, use: How to Disable Alerts in SharePoint?
Thank you for posting this! I’m trying to disable Alerts for a particular List. I modified the $SiteURL and $ListName to match ours.
The admin account I’m using uses MFA so I’ve also changed that part to:
$Cred = Connect-SPOService -Url https://domain-admin.sharepoint.com
I get logged in OK but then I get this error at the end:
Exception calling “ExecuteQuery” with “0” argument(s): “The remote server returned an error: (403) Forbidden.”
I’m guessing something is not being passed correctly. My admin account is a site collection admin and site owner. Do you know how I can use your PowerShell script with MFA?
Thank you!
Please refer to this checklist to troubleshoot 403 Forbidden error in SharePoint Online: SharePoint Online: Fix “The remote server returned an error: (403) Forbidden” Error in PowerShell
Thanks, that helped! I had to create an app password and the script worked! Now to figure out how to hide or disable the SharePoint Alerts so users can’t create new ones (the list contains sensitive items and notifications are already handled via Flow).