Last active
May 12, 2025 07:14
-
-
Save akashdborkar/da26559ee5813060ae25180360acafce to your computer and use it in GitHub Desktop.
Most widely used PowerShell SPE commands in Sitecore XM Cloud content migration.
This file contains hidden or 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
#Get All Renderings for an Item. This script was used to analyze an item’s legacy renderings, map them with new XM cloud renderings (components), and map fields. | |
$item = Get-Item -Path $path -Version "latest" | |
$resultObj = @() | |
$defaultLayout = Get-LayoutDevice"Default" | |
Get-Rendering -Item $item -Device $defaultLayout -FinalLayout | ForEach{ | |
$renderingItem = Get-Item -Path master: -ID $_.ItemID | |
$Obj = @{ | |
RenderingName = $renderingItem.Name | |
RenderingId = $_.ItemID | |
DataSource = $_.Datasource | |
Placeholder = $_.Placeholder | |
PageItem = $_.OwnerItemID | |
} | |
$resultObj += New-Object psobject -Property $Obj | |
} | |
$resultObj | Format-Table RenderingName, RenderingId, DataSource, Placeholder, PageItem | |
#Create and Set Rendering for an Item. When importing data from CSV, we often need to create and set a data source to render an item. | |
For this use case, I created a function that takes the rendering ID, the placeholder to add the rendering, and the data source ID. | |
function CreateAndSetRendering | |
{ | |
param([String]$id,[String]$placeholder,[String]$dsid) | |
$renderingId = [Sitecore.Data.ID]::Parse($id) | |
$rendering = get-item -path master: -id $renderingId | |
$renderinginstance = $rendering | new-rendering -placeholder $placeholder | |
if($dsid -ne "") | |
{ | |
$datasourceId = [Sitecore.Data.ID]::Parse($dsid) | |
$renderinginstance.datasource = $datasourceId | |
} | |
add-rendering -item $item -placeholder $placeholder -instance $renderinginstance -finallayout | |
$item.editing.beginedit() | |
$item.editing.endedit() | out-null | |
} | |
#Retrieve the Rendering and Remove From the Presentation | |
{3904b0bf-b10b-4fbb-9ced-3de87dfa3d48} is the Sitecore Item ID of the rendering item we wish to retrieve | |
$defaultLayout = Get-LayoutDevice"Default" | |
$rendering = Get-Rendering -Item $item -Device $defaultLayout -FinalLayout | Where-Object{$_.ItemID -eq "{3904b0bf-b10b-4fbb-9ced-3de87dfa3d48}"} | |
Remove-Rendering -Item $item -Instance $rendering -Device $defaultLayout -FinalLayout | |
#Getting a Specific Rendering Parameter Value where $paraName is the rendering parameter name, for example, “Styles”. | |
$rendering = Get-Item -Path master: -Id "{3904b0bf-b10b-4fbb-9ced-3de87dfa3d48}" | |
$renderingItem = Get-Rendering -Item $item -Device $defaultLayout -Rendering $rendering -FinalLayout | |
$parameterValue = Get-RenderingParameter -Rendering $renderingItem -Name $paramName | |
#Updating Rendering Parameter Value | |
If there are more than one rendering of the same type, the returned $renderingItem will be an array so you can access the first rendering | |
parameters $renderingItem[0].Parameters: This will return all parameters, and then you will have to check for a specific parameter. | |
$rendering = Get-Item -Path master: -Id "{3904b0bf-b10b-4fbb-9ced-3de87dfa3d48}" | |
$renderingItem = Get-Rendering -Item $item -Device $defaultLayout -Rendering $rendering -FinalLayout | |
$renedringParams = $renderingItem[0].Parameters | |
$styles = "Styles" | |
if($renedringParams.Contains($styles)){ | |
$renedringParams = @{ | |
Styles = "%7B3904b0bf-b10b-4fbb-9ced-3de87dfa3d48%7D" | |
} | |
} | |
Set-RenderingParameter -Instance $renderingItem[0] -Parameter $renedringParams | Out-Null | |
Set-Rendering -Item $item -Instance $renderingItem[0] -FinalLayout | |
Note: We must embed Sitecore ID for your required style between %7B and %7D. For multiple values, the separator is %7D%7C%7B. It’s how Sitecore stores params values. | |
You can store multiple values like this: Styles = “%7B3904b0bf-b10b-4fbb-9ced-3de87dfa3d48%7D%7C%7B936219ee-a03b-49c5-8eff-8b877b5c1319%7D” |
This file contains hidden or 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
#Create a New Item Using the Template ID | |
$item = New-Item -Path $path -Name $itemName -ItemType $itemTemplateId -Language "en" | |
#Sometimes, you may need to create an item with the same ID as in the legacy system to avoid numerous reconfigurations. | |
Especially if those items are being used as the data source. In such a use case, we could use CreateItem from | |
Sitecore.Data.Managers.ItemManager. | |
This method takes the item name, parent item, template ID, and item ID. The passed $id will be the ID of the newly created Sitecore Item. | |
$item = [Sitecore.Data.Managers.ItemManager]::CreateItem($name, $parentItem, $templateItem.ID, $id) | |
#Also, there is a ForceId param supported by the ‘New Item‘ function | |
New-Item -Path $path -Name $name -ItemType "Blog Page" -ForceId "3904b0bf-b10b-4fbb-9ced-3de87dfa3d48" | |
#Create a New Item Using the Branch Template | |
$item = [Sitecore.Data.Managers.ItemManager]::AddFromTemplate($itemName, $branchTemplateId, $parentItem) | |
#Checking if the Path Exists in the Content Tree | |
In use cases, we need to check whether the path exists before creating an item on that path. | |
$pathExists = Test-Path -Path $path | |
if($pathExists) | |
{ | |
//logic | |
} | |
#Copying Items | |
Copy-Item -Path $sourcePath -Destination $targetPath |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment