-
-
Save gyusza/ad544f5ed28b6ca6cf3ca44153dda65e to your computer and use it in GitHub Desktop.
Sitecore PowerShell script to list all orphaned datasources
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<# | |
.SYNOPSIS | |
Lists the datasources which are not or no longer referenced to a rendering in a page. | |
.NOTES | |
Ramon Bruelisauer (original) | |
Manuel Fischer (adjustements for the Master Solution) | |
#> | |
<## | |
# filter IsCandidateItem | |
# ---------------------- | |
# Check whether the given item is based on a Master component template and is a child item | |
# of a 'Local Data' or 'Shared Data' folder. | |
#> | |
filter IsCandidateItem { | |
param( | |
[Parameter(Mandatory=$true, ValueFromPipeline=$true)] | |
$Item, | |
[Parameter(Mandatory=$true)] | |
$Templates | |
) | |
Process { | |
$isCandidateTemplate = $Templates.Contains($Item.TemplateName) | |
If ($isCandidateTemplate) { | |
$parentItem = $Item.Parent | |
$isLocalData = $parentItem.TemplateName -eq "Local Data" | |
$isSharedData = $parentItem.TemplateName -eq "Shared Data" | |
If ($isLocalData -or $isSharedData) { | |
$Item | |
} | |
} | |
} | |
} | |
<## | |
# filter HasNoReferrers | |
# --------------------- | |
# Check whether the given item is not linked to any field, item or rendering. | |
#> | |
filter HasNoReferrers { | |
param( | |
[Parameter(Mandatory=$true, ValueFromPipeline=$true)] | |
$Item | |
) | |
Process { | |
$referrers = Get-ItemReferrer -Item $Item | |
If ($referrers -eq $null -or $referrers.Count -eq 0) { | |
$Item | |
} | |
} | |
} | |
## | |
# Get the content root item from master database | |
# | |
$database = "master" | |
$contentRootItem = Get-Item -Path "$($database):\content\Master\Home" | |
## | |
# Collect all Master component templates | |
# | |
$componentTemplates = @() | |
$componentsRootItem = Get-Item -Path "$($database):\templates\User Defined\Master\Components" | |
$suvaComponents = Get-ChildItem -Path $componentsRootItem.ProviderPath -Recurse | Foreach { | |
$Item = $_ | |
If ($Item.TemplateName -eq "Template") { | |
$componentTemplates = $componentTemplates + @($Item.Name) | |
} | |
} | |
## | |
# Collect all items below content root item, which meet the following requirements: | |
# 1. the item is using a Master component template | |
# 2. the item is stored in a 'Local Data' or 'Shared Data' folder | |
# 3. the item does not have any referring items | |
# | |
$items = Get-ChildItem -Path $contentRootItem.ProviderPath -Recurse | IsCandidateItem -Templates $componentTemplates | HasNoReferrers | |
## | |
# Create the report output | |
# | |
if($items.Count -eq 0){ | |
Show-Alert "Es wurden keine Datasources gefunden, die nicht (mehr) mit einer Seite/Rendering verknüpft sind." | |
} else { | |
$props = @{ | |
Title = "Unreferenzierte Datasources - Resultate" | |
InfoTitle = "Datasources, die nicht mehr mit einer Seite verknüpft sind" | |
InfoDescription = "Zeigt die Datasources an, die nicht mehr mit einem Rendering in einer Seite verknüpft sind" | |
PageSize = 25 | |
} | |
$items | Show-ListView @props -Property @{Label="Datasource Name"; Expression={$_.DisplayName} }, | |
@{Label="Datasource Type"; Expression={$_.TemplateName} }, | |
@{Label="Created"; Expression={$_.__Created} }, | |
@{Label="Path"; Expression={$_.Paths.ContentPath} } | |
} | |
Close-Window |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment