This blog can help you to work with Sitecore CMS and work with PowerShell script more efficiently. The following code snippet will be used to add rendering to the page and change the datasource to the rendering programmatically using the PowerShell script.
This code should work with any version of Sitecore.
Open - Development Tools -> PowerShell ISE and paste the following code.
Modify the paths and fields according to your template fields.
1. Add rendering to the existing page
PowerShell script code:
$masterdatabase = "master" $webdatabase = "web" $root = Get-Item -Path (@{$true="$($masterdatabase):\sitecore\content\AKWeb\Home\Articles"; $false="$($masterdatabase):\content"}[(Test-Path -Path "$($masterdatabase):\content\home")]) $RenderingItem = Get-Item -Path (@{$true="$($masterdatabase):\sitecore\layout\Renderings\Feature\SubHeader";$false="$($masterdatabase):\content"}[(Test-Path -Path "$($masterdatabase):\content\home")]) $DatasourcePath = Get-Item -Path (@{$true="$($masterdatabase):\sitecore\content\AKWeb\Shared\Datasources\SubHeader\SubHeader";$false="$($masterdatabase):\content"}[(Test-Path -Path "$($masterdatabase):\content\home")]) $placeholderH = "header" #Find the rendering item and convert to a rendering $renderingItemWithPlaceholder = $RenderingItem | New-Rendering -Placeholder "header" $IsRenderingAdded= $true $count=0 $changedItems=New-Object System.Collections.ArrayList $props = @{ Parameters = @( @{Name="root"; Title="Choose the report root"; Tooltip="Only items from this root will be returned."; } @{Name="RenderingItem"; Title="Choose the Rendering"; Tooltip="Only items from this root will be returned."; } @{Name="DatasourcePath"; Title="Choose the Datasource"; Tooltip="Only items from this root will be returned."; } ) Title = "Add Rendering to Article Pages" Description = "Choose the criteria for the report." Width = 550 Height = 300 ShowHints = $true Icon = [regex]::Replace($PSScript.Appearance.Icon, "Office", "OfficeWhite", [System.Text.RegularExpressions.RegexOptions]::IgnoreCase) } $result = Read-Variable @props if($result -eq "cancel") { exit } filter Where-Addrendering { param( [Parameter(Mandatory=$true,ValueFromPipeline=$true)] [Sitecore.Data.Items.Item]$item ) if ($item) { $defaultLayout = Get-LayoutDevice "Default" $AllRenderingsInPlaceholder= Get-Rendering -Item $item -Rendering $RenderingItem -Placeholder "*header*" -Device $defaultLayout -FinalLayout foreach($rItem in $AllRenderingsInPlaceholder){ if($rItem.ItemId -eq $RenderingItem.Id){ #$count+=1 #if($count -eq 1) #{ #$renderingItem = Get-Item -Path $rendering.ItemID Write-Host "Removing Rendering: $($rItem) for Item $($item.Name)" Remove-Rendering -Item $item -Instance $rItem -Device $defaultLayout -FinalLayout Write-Host "Removing Rendering: $($rItem) for Item $($item.Name)" #$count=0; #} } } $sidebarComponentInPlaceholder= Get-Rendering -Item $item -Rendering $RenderingItem -Placeholder "*header*" -Device $defaultLayout -FinalLayout if($sidebarComponentInPlaceholder -eq $null){ # if($IsRenderingAdded){ Add-Rendering -Item $item -PlaceHolder "header" -Instance $renderingItemWithPlaceholder -Index 1 -Datasource $DatasourcePath.Paths.Path -Device $defaultLayout -FinalLayout $count+=1; Write-Host "Removing Rendering: $($rItem) for Item $($item.Name)" #$IsRenderingAdded=$false $changedItem=New-Object PSObject -Property @{ Name=$item.Name ItemPath=$item.Paths.Path RenderingName=$RenderingItem.Name DatasourcePath=$DatasourcePath.Paths.Path } $changedItems.Add($changedItem) } #} } } $items = @($root) + @(($root.Axes.GetDescendants())) | Where-Object {$_.TemplateName -eq "Article Page"} | Initialize-Item $finalitems = $items | Where-Addrendering if($changedItems.Count -eq 0) { Show-Alert "Zero Renderings added." } else { #$finalitems = $items | Where-Addrendering $props = @{ Title = "Rendering Added on Items" InfoTitle = "Rendering Added on Items $($count)" InfoDescription = "Rendering Added on Items $($changedItems.Count)" PageSize = 25 } $changedItems | Show-ListView @props -Property @{Label="Icon"; Expression={$_.__Icon} }, @{Label="Name"; Expression={$_.Name} }, @{Label="RenderingName"; Expression={$RenderingItem.Name} }, @{Label="Datasource Path"; Expression={$DatasourcePath.Paths.Path} }, @{Label="ItemPath"; Expression={$_.ItemPath} } } Close-Window
2. Change the datasource to the rendering
PowerShell script code:
$masterdatabase = "master" $webdatabase = "web" $root = Get-Item -Path (@{$true="$($masterdatabase):\sitecore\content\AKWeb\Home"; $false="$($masterdatabase):\content"}[(Test-Path -Path "$($masterdatabase):\content\home")]) $RenderingItem = Get-Item -Path (@{$true="$($masterdatabase):\sitecore\layout\Renderings\Feature\AKWeb\Components\Banner\Banner Rendering";$false="$($masterdatabase):\content"}[(Test-Path -Path "$($masterdatabase):\content\home")]) $DatasourcePath = Get-Item -Path (@{$true="$($masterdatabase):\sitecore\content\AKWeb\Shared\Datasources\Banner Dark Theme\Test Rendering Datasource";$false="$($masterdatabase):\content"}[(Test-Path -Path "$($masterdatabase):\content\home")]) $placeholderH = "*footer*" #Find the rendering item and convert to a rendering $renderingItemWithPlaceholder = $RenderingItem | New-Rendering -Placeholder $placeholderH $IsRenderingAdded= $true $count=0 $changedItems=New-Object System.Collections.ArrayList $props = @{ Parameters = @( @{Name="root"; Title="Choose the report root"; Tooltip="Only items from this root will be returned."; } @{Name="RenderingItem"; Title="Choose the Rendering"; Tooltip="Only items from this root will be returned."; } @{Name="DatasourcePath"; Title="Choose the Datasource"; Tooltip="Only items from this root will be returned."; } ) Title = "Add Rendering to Article Pages" Description = "Choose the criteria for the report." Width = 550 Height = 300 ShowHints = $true Icon = [regex]::Replace($PSScript.Appearance.Icon, "Office", "OfficeWhite", [System.Text.RegularExpressions.RegexOptions]::IgnoreCase) } $result = Read-Variable @props if($result -eq "cancel") { exit } filter Where-Addrendering { param( [Parameter(Mandatory=$true,ValueFromPipeline=$true)] [Sitecore.Data.Items.Item]$item ) if ($item) { $defaultLayout = Get-LayoutDevice "Default" $AllRenderingsInPlaceholder= Get-Rendering -Item $item -Placeholder $placeholderH -Device $defaultLayout -FinalLayout $sidebarComponentInPlaceholder= Get-Rendering -Item $item -Rendering $RenderingItem -Placeholder $placeholderH -Device $defaultLayout -FinalLayout if($sidebarComponentInPlaceholder -eq $null) { Add-Rendering -Item $item -PlaceHolder $placeholderH -Instance $renderingItemWithPlaceholder -Datasource $DatasourcePath.Paths.Path -Device $defaultLayout -FinalLayout $count+=1; $changedItem=New-Object PSObject -Property @{ Name=$item.Name ItemPath=$item.Paths.Path RenderingName=$RenderingItem.Name DatasourcePath=$DatasourcePath.Paths.Path } $changedItems.Add($changedItem) } else{ # Get-Rendering -Item $item -Placeholder $placeholderH | foreach($rendering in $AllRenderingsInPlaceholder) { #if($sidebarComponentInPlaceholder -ne $null){ if($rendering.ItemId -eq '{6YUIY897-H67L-4B89-MMA7F-0OJKY78L9}'){ $rendering.DataSource = $DatasourcePath.Paths.Path Set-Rendering -Item $item -Instance $rendering #Set-Rendering -Item $item -PlaceHolder $placeholderH -Instance $renderingItemWithPlaceholder -Datasource $DatasourcePath.Paths.Path -Device $defaultLayout -FinalLayout $count+=1; #$IsRenderingAdded=$false $changedItem=New-Object PSObject -Property @{ Name=$item.Name ItemPath=$item.Paths.Path RenderingName=$rendering.Name DatasourcePath=$DatasourcePath.Paths.Path } $changedItems.Add($changedItem) } #} } } } } $items = @($root) + @(($root.Axes.GetDescendants())) | Where-Object {$_.TemplateName -eq "Article Page"} | Initialize-Item $finalitems = $items | Where-Addrendering if($changedItems.Count -eq 0) { Show-Alert "Zero Renderings added." } else { #$finalitems = $items | Where-Addrendering $props = @{ Title = "Rendering Added on Items" InfoTitle = "Rendering Added on Items $($count)" InfoDescription = "Rendering Added on Items $($changedItems.Count)" PageSize = 25 } $changedItems | Show-ListView @props -Property @{Label="Icon"; Expression={$_.__Icon} }, @{Label="Name"; Expression={$_.Name} }, @{Label="RenderingName"; Expression={$RenderingItem.Name} }, @{Label="Datasource Path"; Expression={$DatasourcePath.Paths.Path} }, @{Label="ItemPath"; Expression={$_.ItemPath} } } Close-Window