Close Menu
    DevStackTipsDevStackTips
    • Home
    • News & Updates
      1. Tech & Work
      2. View All

      Agent Mode for Gemini added to Android Studio

      June 24, 2025

      Google’s Agent2Agent protocol finds new home at the Linux Foundation

      June 23, 2025

      Decoding The SVG path Element: Curve And Arc Commands

      June 23, 2025

      This week in AI dev tools: Gemini 2.5 Pro and Flash GA, GitHub Copilot Spaces, and more (June 20, 2025)

      June 20, 2025

      Microsoft is reportedly planning yet more major cuts at Xbox — as early as next week

      June 24, 2025

      Microsoft makes Windows 10 security updates FREE for an extra year — but there’s a catch, and you might not like it

      June 24, 2025

      “Deus Ex” just turned 25 years old and it’s still the best PC game of all time — you only need $2 to play it on practically anything

      June 24, 2025

      Where to buy a Meta Quest 3S Xbox Edition — and why it’s a better bargain than the “normal” Meta Quest 3S

      June 24, 2025
    • Development
      1. Algorithms & Data Structures
      2. Artificial Intelligence
      3. Back-End Development
      4. Databases
      5. Front-End Development
      6. Libraries & Frameworks
      7. Machine Learning
      8. Security
      9. Software Engineering
      10. Tools & IDEs
      11. Web Design
      12. Web Development
      13. Web Security
      14. Programming Languages
        • PHP
        • JavaScript
      Featured

      Vite 7.0 Is Out

      June 24, 2025
      Recent

      Vite 7.0 Is Out

      June 24, 2025

      Exploring JavaScript ES2025 Edition

      June 24, 2025

      Mastering Mixed DML Operations in Apex

      June 24, 2025
    • Operating Systems
      1. Windows
      2. Linux
      3. macOS
      Featured

      Microsoft is reportedly planning yet more major cuts at Xbox — as early as next week

      June 24, 2025
      Recent

      Microsoft is reportedly planning yet more major cuts at Xbox — as early as next week

      June 24, 2025

      Microsoft makes Windows 10 security updates FREE for an extra year — but there’s a catch, and you might not like it

      June 24, 2025

      “Deus Ex” just turned 25 years old and it’s still the best PC game of all time — you only need $2 to play it on practically anything

      June 24, 2025
    • Learning Resources
      • Books
      • Cheatsheets
      • Tutorials & Guides
    Home»Development»Sitecore PowerShell commands – XM Cloud Content Migration

    Sitecore PowerShell commands – XM Cloud Content Migration

    May 8, 2025

    In this post, I’ve listed the most commonly used Sitecore PowerShell commands for content migration. This blog continues from my earlier post: Sitecore XM Cloud Content Migration: Plan and Strategy.

    During migration, we created several PowerShell scripts to extract data from the legacy database to CSVs. We then used those CSVs to import content into XM Cloud instances. Based on those scripts, I organized the commands into two groups: Working with Sitecore items and Working with Sitecore renderings. These commands aim to help developers handle similar Sitecore to XM Cloud migrations.

    Working With Sitecore Items

    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

    Working with Sitecore Renderings

    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

    $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”

    Conclusion

    So, this is the consolidated list of Sitecore PowerShell commands for content migration. The IDs used in the above snippets were not valid Sitecore item IDs. Replace them with valid Sitecore item IDs based on the Sitecore items used in your project.

    Keep learning!

    Source: Read More 

    Facebook Twitter Reddit Email Copy Link
    Previous ArticleOur Partner Adobe Recognized Again as a DXP Leader
    Next Article Mastering Node.js Streams: The Ultimate Guide to Memory-Efficient File Processing

    Related Posts

    Security

    Rogue WordPress Plugin Unmasked: Stealthy Malware Skims Credit Cards & Steals Credentials

    June 24, 2025
    Security

    Urgent Advantech Alert: Critical Flaws (CVSS 9.6) Expose Industrial Automation to Remote Takeover, PoC Releases

    June 24, 2025
    Leave A Reply Cancel Reply

    For security, use of Google's reCAPTCHA service is required which is subject to the Google Privacy Policy and Terms of Use.

    Continue Reading

    Conditional Context Management Made Easy with Laravel’s Context Facade

    Conditional Context Management Made Easy with Laravel’s Context Facade

    Development

    misterspelik/laravel-pdf

    Development

    Mastering API Integration in React Native: A Step-by-Step Success Blueprint🔗

    Web Development

    Identity theft – six tips to help keep yours safe

    Development

    Highlights

    Androidlekken kunnen malafide apps ongemerkt meer permissies geven

    June 3, 2025

    Androidlekken kunnen malafide apps ongemerkt meer permissies geven

    Verschillende kwetsbaarheden in Android maken het mogelijk voor malafide apps om ongemerkt meer permissies te krijgen. Google heeft updates uitgebracht om de problemen te verhelpen. Tijdens de patchro …
    Read more

    Published Date:
    Jun 03, 2025 (2 hours, 24 minutes ago)

    Vulnerabilities has been mentioned in this article.

    Medical record automation: How a leading underwriting provider transformed their document review process

    April 24, 2025

    Chat 4O – AI Image Generator & Assistant with GPT-4o & O1

    April 1, 2025

    lstr – fast, minimalist directory tree viewer

    June 23, 2025
    © DevStackTips 2025. All rights reserved.
    • Contact
    • Privacy Policy

    Type above and press Enter to search. Press Esc to cancel.