Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save akashdborkar/da26559ee5813060ae25180360acafce to your computer and use it in GitHub Desktop.
Save akashdborkar/da26559ee5813060ae25180360acafce to your computer and use it in GitHub Desktop.
Most widely used PowerShell SPE commands in Sitecore XM Cloud content migration.
#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”
#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