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()
#Read more: https://www.sharepointdiary.com/2011/11/managing-alerts-using-powershell.html#ixzz8PXZ2TVL0
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()
#Read more: https://www.sharepointdiary.com/2011/11/managing-alerts-using-powershell.html#ixzz8PXZ8chxj
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()
#Read more: https://www.sharepointdiary.com/2011/11/managing-alerts-using-powershell.html#ixzz8PXZFzEkd
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()
#Read more: https://www.sharepointdiary.com/2011/11/managing-alerts-using-powershell.html#ixzz8PXZKSeh9
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()
}
#Read more: https://www.sharepointdiary.com/2011/11/managing-alerts-using-powershell.html#ixzz8PXZQ3OKW
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
}
#Read more: https://www.sharepointdiary.com/2011/11/managing-alerts-using-powershell.html#ixzz8PXZSYmZD
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
}
}
#Read more: https://www.sharepointdiary.com/2011/11/managing-alerts-using-powershell.html#ixzz8PXZYEknP
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)
}
#Read more: https://www.sharepointdiary.com/2011/11/managing-alerts-using-powershell.html#ixzz8PXZc70EE
Delete user alerts in SharePoint with PowerShell
Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue
#Configuration Parameters
$SiteURL="https://portal.crescent.com/ "
$Email = "salaudeen.rajack@crescent.com"
$Subject = "Test Email from SharePoint"
$Body = "Test Email Body"
#Get the Web
$Web = Get-SPWeb $SiteURL
#Send Email using SPUtility SendEmail method
[Microsoft.SharePoint.Utilities.SPUtility]::SendEmail($Web ,0,0,$Email,$Subject,$Body)
#Read more: https://www.sharepointdiary.com/2016/09/how-to-test-outgoing-emails-in-sharepoint-using-powershell.html#ixzz8PXSqQTxT
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”