Find All Custom Actions in SharePoint using PowerShell

PowerShell to Get Custom Actions in SharePoint

Custom actions may be deployed to the site, web, or list scopes. Here is a PowerShell script to list all custom actions from the given web scope.

Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue

#Set Site variable
$SiteURL="https://intranet.crescent.com"

Try {
    #Get the Web
    $Web = Get-SPWeb $SiteURL
 
    #Get All Custom Actions of the web
    $CustomActions = $web.UserCustomActions

    If($CustomActions -ne $Null)
    {
        #Get custom action
        ForEach($CustomAction in $CustomActions)
        {
            Write-Host -f Green "Custom Action Title: '$($CustomAction.Title)' ID: $($CustomAction.ID)"
        }
    }
    Else
    {
        write-host -f Yellow "No Custom Actions Found!"
    } 
} Catch {
    Write-Host -ForegroundColor Red "Error:" $_.Exception.Message
}

PowerShell to Find All Custom Actions in a Site Collection

Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue

#Custom function to get custom actions from given scope
Function Get-CustomActions([Microsoft.SharePoint.SPUserCustomActionCollection]$UserCustomActionCollection, [string] $ScopeReference, [string] $ReportOutput)
{
        $CustomActionsData = @()
        ForEach($CustomAction in $UserCustomActionCollection)
        {
            Write-Host -f Green "`t `t `t Found a Custom Action: '$($CustomAction.Title)' at:" $ScopeReference
            #Get Custom Action Data
            $CustomActionsData += New-Object PSObject -Property @{
                    'Deployed At' = $ScopeReference
                    'Name' = $CustomAction.Name
                    'Title' = $CustomAction.Title
                    'ID' = $CustomAction.ID
                    'Group' = $CustomAction.Group
                    'Location' = $CustomAction.Location                
                    'Sequence' = $CustomAction.Sequence
                    'Url' = $CustomAction.Url
                    'Scope' = $CustomAction.Scope
                    'ScriptBlock' = $CustomAction.ScriptBlock
                    'ScriptSrc' = $CustomAction.ScriptSrc 
                    }
        }
        #Export the data to CSV
        $CustomActionsData | Export-Csv $ReportOutput -NoTypeInformation -Append  

}

#Set Site variable
$SiteURL="https://intranet.crescent.com"
 
$ReportOutput = "C:\Temp\CustomActions.csv"
#Delete the Output Report, if exists
if (Test-Path $ReportOutput) { Remove-Item $ReportOutput }
 
#Get the Site Collection
$Site = Get-SPSite $SiteURL

Write-host -f Yellow "Searching Site Scoped Custom Actions at:" $SiteURL
$ScopeReference = "Site Collection:"+$Site.Url
If($Site.UserCustomActions -ne $Null) { Get-CustomActions $Site.UserCustomActions  $ReportOutput}
    
#Iterate through each web (subsite) and Get All custom actions
ForEach ($web in $Site.AllWebs)
{
    Write-host -f Yellow "`t Searching Web Scoped Custom Actions at:" $Web.Url
    
    #Get all lists of the web - Exclude hidden
    $ListCollection = $web.Lists | Where-Object  { ($_.hidden -eq $false)}

    #Call the function to Get custom actions at web
    $ScopeReference = "Web:"+$Web.URL
    If($web.UserCustomActions -ne $null) { Get-CustomActions $web.UserCustomActions $ScopeReference $ReportOutput }

    #Get Custom Actions at List level
    Write-host -f Yellow "`t `t Searching List Scoped Custom Actions at:" $Web.Url
    ForEach($List in $ListCollection)
    {
        $ScopeReference = "List:"+$list.RootFolder.ServerRelativeUrl
        If($List.UserCustomActions -ne $Null) {Get-CustomActions $list.UserCustomActions $ScopeReference $ReportOutput}
    }
}

This script gets all custom actions from the given site collection’s site, web, and list scopes and exports them to a CSV file.

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!

Leave a Reply

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