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”
Great post,helped me alot
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.
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.
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.
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!
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.
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.
Thanks a lot! Your site has a been a big help for number of occasions for over the years.
God bless you!
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
Start here: Check if Service Application is Running in SharePoint using PowerShell. and here: Monitor SharePoint services and Send E-mail if it goes down
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!
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
Provide snippet code is very useful for beginner and expert, This Post is good one keep it up!
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.
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
Thanks for posting this reply. It was helpful
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.
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!
Thanks! Fixed the Typo!!
Great! Nifty snippets.
Is this for SharePoint 2010 or SharePoint 2007? Or maybe both? I need it for 2007…
The above scripts are for SharePoint 2010. However, you will be able to use them with MOSS 2007 with little changes in code.
Refer to this post How to use PowerShell in MOSS 2007?.
line 5 of your second code sample seems to have some code mistakenly injected:
$SPlist=$SPweb.lists[“Shared Dojavascript:void(0)cuments”]
Fixed Mark! Thanks for Notifying!