Create – Edit – Find – Delete SharePoint Alerts using PowerShell

Welcome to another PowerShell walk-through. In this article I’m exploring Management of SharePoint Alerts using PowerShell!

Enable or disable alerts for Web application

## To enable alerts for Web application

$SPwebapp=Get-SPWebApplication "https://SharePointSite.com"
$SPwebapp.AlertsEnabled = $true
$SPwebapp.Update()

# To Disable alerts for a Web application
$SPwebapp.AlertsEnabled = $false
$SPwebapp.Update()

Create Alert in SharePoint using PowerShell

##### Create a New alert for a user #########

$SPsite = Get-SPSite "https://SharePointSite.com"
$SPweb=$SPsite.Rootweb
$SPlist=$SPweb.lists["Shared documents"]
$SPuser = $SPweb.EnsureUser('Domain\Salaudeen')
$SPnewAlert = $SPuser.Alerts.Add()
$SPnewAlert.Title = "My Custom Alert"
$SPnewAlert.AlertType=[Microsoft.SharePoint.SPAlertType]::List
$SPnewAlert.List = $SPlist
$SPnewAlert.DeliveryChannels = [Microsoft.SharePoint.SPAlertDeliveryChannels]::Email
$SPnewAlert.EventType = [Microsoft.SharePoint.SPEventType]::Add
$SPnewAlert.AlertFrequency = [Microsoft.SharePoint.SPAlertFrequency]::Immediate
$SPnewAlert.Update()
$SPweb.Dispose()
$SPSite.Dispose()

Get all alerts from a SharePoint List with PowerShell:

##### Display All alerts for a Particular List ########

$SPWeb = Get-SPWeb "https://SharePointSite.com" 
#Relative URL of list/document library. For lists "Lists/Tasks"
$SPListURL = "Shared Documents"  
foreach($alert in $SPWeb.Alerts)
{
    if($alert.ListUrl -eq $SPListUrl)
    {           
            "User Name    - " + $alert.User.Name
            "Title        - " + $alert.Title
            "Frequency    - " + $alert.AlertFrequency
            "Delivery Via - " + $alert.DeliveryChannels
            "Change Type  - " + $alert.eventtype
            Write-Host "=================================="
    }
}
$SPweb.Dispose()

Create Alerts for All users in a Group:

##### Set alerts for all users in the SharePoint Group ######

$SPweb = Get-SPWeb "https://SharePointSite.com"
$SPgroup = $SPweb.Groups["SharePoint Owners"]
$SPlist = $SPweb.Lists["Shared Documents"]
foreach ($SPuser in $SPgroup.Users){
     $alert = $SPuser.Alerts.Add()
     $alert.Title = "My Alert"
     $alert.AlertType = [Microsoft.SharePoint.SPAlertType]::List
     $alert.List = $SPlist
     $alert.DeliveryChannels = [Microsoft.SharePoint.SPAlertDeliveryChannels]::Email
     $alert.EventType = [Microsoft.SharePoint.SPEventType]::Add
     $alert.AlertFrequency = [Microsoft.SharePoint.SPAlertFrequency]::Immediate
     $alert.Update()
}
$SPweb.Dispose()

Update SharePoint Alerts using PowerShell

#####  Making Changes in Existing Alerts ########
$SPsite = Get-SPSite "https://SharePointSite.com"
$SPweb=$SPsite.RootWeb
$SPuser=$SPweb.EnsureUser('Domain\Salaudeen')
$SPalertCollection=$SPuser.Alerts
foreach($alert in $SPalertCollection)
{
   $alert.AlertFrequency = [Microsoft.SharePoint.SPAlertFrequency]::Daily
   $alert.Update()
}

Get Alerts for a Particular User

##### Get alerts for a particular user #########
$SPsite = Get-SPSite "https://SharePointSite.com"
$SPweb=$SPsite.RootWeb
$SPuser=$SPweb.EnsureUser('Domain\Salaudeen')
$SPalertCollection=$SPuser.Alerts
foreach($alert in $SPalertCollection)
{
   write-host -f Green $alert.Title
}

Find All Alerts of a User in Entire Site collection

##### Get the Alerts of Entire Site collection #####
$SPsiteCollection = Get-SPSite "https://SharePointSite.com"

# Iterate through all Webs in the Site Collection
foreach($SPweb in $SPsiteCollection.AllWebs) 
 {
   foreach($alert in $SPweb.Alerts)
    {
        Write-Host "Alerts List :" $alert.ListUrl
        Write-Host "Alerts Title :" $alert.title
        write-host "Subscribed User: " $alert.user
     }
 }

Delete All SharePoint alerts from a List using PowerShell

##### Delete All alerts for a specific List #####

$SPweb = Get-SPWeb "https://SharePointSite.com"
$SPlist = $SPweb.lists["Shared Documents"]
$IDS = ""
foreach($alert in $spweb.alerts)
{
	if($alert.ListID -eq $SPlist.ID)
	{
		$IDS += $alert.ID.tostring() + "|"
	}
	write-host -nonewline "*"
}
write-host "deleting..."
foreach($s in $IDS.Split("|"))
{
	write-host -nonewline "*"
	$spweb.alerts.delete([GUID]$s)
}

Delete user alerts in SharePoint with PowerShell

##### Remove all alerts for specific user from a Web Application #####

$SPwebApp = Get-SPWebApplication "https://SharePointSite.com"
$SpecificUser = "Domain\Salaudeen"

    foreach ($SPsite in $SPwebApp.Sites)
    {
       # get the collection of webs
       foreach($SPweb in $SPsite.AllWebs) 
        {
           $alerts = $SPweb.Alerts

            # if 1 or more alerts for a particular user, Make a note of them by copying their ID to an Array
            if ($alerts.Count -gt 0)
            {
                $myalerts = @()
                foreach ($alert in $alerts)
                  {
                    if ($alert.User -like $SpecificUser)
                     {
                        $myalerts += $alert
                     }
                  }

               ### now we have alerts for this site, we can delete them
                foreach ($alertdel in $myalerts)
                {
                    $alerts.Delete($alertdel.ID)
                    write-host $alertdel.ID
                }
            }
        }
    }

Finally, some minimized code:

To delete all alerts from a site:
$SPweb.Alerts| foreach-object {$web.Alerts.Delete($_.Id)}

Filter the alerts for a single list:
#For for e.g. https://SharePoint.com/site/Assets”
$SPweb.Alerts| where-object {$_.ListUrl -like “Assets”} 

Find all the Alerts for a specific user across the web:
# ? is the alias for where-object cmdlet
$web.Alerts | ? {$_.UserId -like “Domain\Salaudeen”}

Get all the alerts for a user across the entire site collection:
$site.AllWebs | select -expand Alerts | ? {$_.UserId -like “Domain\Salaudeen”

Salaudeen Rajack

Salaudeen Rajack - Information Technology Expert with Two-decades of hands-on experience, specializing in SharePoint, PowerShell, Microsoft 365, and related products. He has held various positions including SharePoint Architect, Administrator, Developer and consultant, has helped many organizations to implement and optimize SharePoint solutions. Known for his deep technical expertise, He's passionate about sharing the knowledge and insights to help others, through the real-world articles!

26 thoughts on “Create – Edit – Find – Delete SharePoint Alerts using PowerShell

  • I’m trying to run the script that deletes all alerts from a SharePoint list and I get this error. I added one line at the top of my script to add “Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue” so the error will relate to line 18 in your script.

    Here is the error:
    *Cannot convert value “” to type “System.Guid”. Error: “Unrecognized Guid format.”
    At I:\Delete All SharePoint alerts from a List.ps1:19 char:5
    + $SPweb.alerts.delete([GUID]$s)
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : InvalidArgument: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvalidCastParseTargetInvocation

    Reply
  • … wondering if there is a way to get notification via email for the entire sharepoint root (all sites) https://x.sharepoint.com/sites when any change is performed, whether user added, file shared, folder created, etc … for sharepoint online. Thanks.

    Reply
  • Great post,helped me alot

    Reply
  • Thanks for all your scripts. Definitely my favorite/most used SharePoint site.

    Is there a way to tweak one of these script to remove duplicate alerts for SharePoint OnPremise. Duplicate meaning one user has two alerts for the same list and it getting notified twice.

    thanks.

    Reply
  • What’s up, I wish for to subscribe for this website to get most recent updates, so where can i do it please help out.

    Reply
  • Hi Thanks for your scripts.

    need your help
    is there any scripts for get an alert for site navigation is changed or updated and newly added.
    please reply me.

    Reply
    • No, There is no way. But if you want to disable new navigation item, try setting “StaticDisplayLevels” to “1” and “MaximumDynamicDisplayLevels” to “0” in your master page!

      Reply
  • Is there a way to change the email FROM address? It’s called out as “Delivery Method – Email -> email shows up greyed out. I’ve looked at all the properties of an alert in powershell and I don’t see it called out.

    Reply
  • Is there a way to change email that the alert comes from? “Delivery Method – email address”.
    I’ve looked at all the properties of an alert and I don’t even see it called out as to who it is coming from.

    Reply
  • Thanks a lot! Your site has a been a big help for number of occasions for over the years.

    God bless you!

    Reply
  • hi bro…need help..

    I need PowerShell script to check whether all service application working or not on daily basis…plz help me on this bro

    Reply
  • Hi Salaudeen,
    Great post!
    Wondering if you have a script to copy a list subscriptions over to a new list? Details here: https://sharepoint.stackexchange.com/questions/159411/powershell-script-to-copy-subscriptions-over

    Many thanks in advanced!

    Reply
    • Hi There,

      Use this PowerShell script to copy alerts between SharePoint lists: https://www.sharepointdiary.com/2015/10/copy-alerts-in-sharepoint-using-powershell.html

      Reply
  • Provide snippet code is very useful for beginner and expert, This Post is good one keep it up!

    Reply
  • Generally many fresher of this field are getting confusion while codding and this is the best idea to display this kind of issue’s example so that another can also solve their problem and learn it.

    Reply
  • Thanks for your code, with you and Jes Collicott (https://www.deliveron.com/blog/post/Find-all-Alerts-in-a-Site-Collection-in-SharePoint-2010.aspx
    )i created code:

    ##Add-PSSnapin microsoft.sharepoint.powershell
    $site = Get-SPSite “https://mysitecolection/”
    $alertResultsCollection = @()
    foreach ($web in $site.AllWebs) {
    foreach ($alert in $web.Alerts){
    $alertURL = $web.URL + “/” + $alert.ListUrl
    $alertResult = New-Object PSObject
    $alertResult | Add-Member -type NoteProperty -name “List URL” -value $alertURL
    $alertResult | Add-Member -type NoteProperty -name “Alert Title” -value $alert.Title
    $alertResult | Add-Member -type NoteProperty -name “Alert Type” -value $alert.AlertType
    $alertResult | Add-Member -type NoteProperty -name “Alert Fraquency” -value $alert.AlertFrequency
    $alertResult | Add-Member -type NoteProperty -name “Delivery Via” -value $alert.DeliveryChannels
    $alertResult | Add-Member -type NoteProperty -name “Change Type” -value $alert.eventtype
    $alertResult | Add-Member -type NoteProperty -name “Subscribed User” -value $alert.User
    $alertResultsCollection += $alertResult
    }
    }
    $site.Dispose()
    ##$alertResultsCollection

    ##Export to CSV
    $alertResultsCollection | Export-CSV “c:AllAlerts.txt”

    Karel Hrubes

    Reply
    • Thanks for posting this reply. It was helpful

      Reply
  • As such I am not that much into SharePoint but wanted to know if we can make use of any delete method in alternative rather than going through this long code. I read somewhere that with .Delete(GUID) this thing is possible.

    Reply
  • Your script for “Display All alerts for a Particular List” contains a small error. You should probably use $SPWeb in your Foreach loop. But it works great! Thanks!

    Reply
  • Great! Nifty snippets.

    Reply
  • Is this for SharePoint 2010 or SharePoint 2007? Or maybe both? I need it for 2007…

    Reply
  • line 5 of your second code sample seems to have some code mistakenly injected:

    $SPlist=$SPweb.lists[“Shared Dojavascript:void(0)cuments”]

    Reply
    • Fixed Mark! Thanks for Notifying!

      Reply

Leave a Reply

Your email address will not be published. Required fields are marked *