Sitecore Poweshell is great tool for maximize the productivity of developers.The Sitecore PowerShell Extensions module (SPE) provides a robust environment for automating tasks within Sitecore.
How do I retrieve my Sitecore items the PowerShell way?
The most natural way to retrieve Sitecore items is with use of Get-Item and Get-ChildItem commandlets. That is because those 2 commandlets add a PowerShell wrapping around them that allows the functionalities that I’m going to describe in the next section of this blog after I’ll tell you all about retrieving items.
1.Getting Items based on path
Example: The following will retrieve the item based on the Sitecore path.
PS master:\> Get-Item -Path master:\content\home
Name Children Languages Id TemplateName
---- -------- --------- -- ------------
Home True {en, de-DE, es-ES, pt... {110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9} Sample Item
As you may have noticed, the
/sitecore
portion of the path is unnecessary. This is because the Sitecore item is represented by the root item of the drive master:
and is therefore optional. The above will return the latest version of the item in your current language. But what if you want the item in another language? No problem!
Example: The following will retrieve the Danish version of the Home item.
PS master:\> Get-Item -Path master:/content/home -Language da | Format-Table DisplayName, Language, Id, Version, TemplateName
DisplayName Language ID Version TemplateName
----------- -------- -- ------- ------------
Hjem da {110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9} 1 Sample Item
I've formatted the output above to show you that indeed the right language was returned.
The command supports wildcards for both-Language
and-Version
parameters.
You may have also noticed that the forward and backward slashes can be used interchangeably.
Example: The following retrieves the latest version for all languages of an item.
PS master:\> Get-Item master:/content/home -Language * | Format-Table DisplayName, Language, Id, Version, TemplateName
DisplayName Language ID Version TemplateName
----------- -------- -- ------- ------------
Home en {110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9} 1 Sample Item
Home de-DE {110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9} 1 Sample Item
Home pl-PL {110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9} 1 Sample Item
Home en-US {110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9} 3 Sample Item
Home en-GB {110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9} 1 Sample Item
Hjem da {110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9} 1 Sample Item
Notice that the item with language
en-US
at its third version.
Example: The following retrieves the item in all languages and versions.
PS master:\> Get-Item master:/content/home -Language * -Version *| Format-Table DisplayName, Language, Id, Version, TemplateName
DisplayName Language ID Version TemplateName
----------- -------- -- ------- ------------
Home en {110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9} 1 Sample Item
Home de-DE {110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9} 1 Sample Item
Home pl-PL {110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9} 1 Sample Item
Home en-US {110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9} 1 Sample Item
Home en-US {110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9} 2 Sample Item
Home en-US {110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9} 3 Sample Item
Home en-GB {110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9} 1 Sample Item
Hjem da {110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9} 1 Sample Item
You can see that specifying the language and version using the wildcard will retrieve all possible variants of an item. The wildcard can also include a partial match like
en-*
. The use of that filter would return all items in the English language, ignoring the region.
Example: The following retrieves the child items in all languages and versions.
PS master:\> Get-ChildItem master:/content -Language * -Version * | Format-Table DisplayName, Language, Id, Version, TemplateName
DisplayName Language ID Version TemplateName
----------- -------- -- ------- ------------
Home en {110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9} 1 Sample Item
Home de-DE {110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9} 1 Sample Item
Home pl-PL {110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9} 1 Sample Item
Home en-US {110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9} 1 Sample Item
Home en-US {110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9} 2 Sample Item
Home en-US {110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9} 3 Sample Item
Home en-GB {110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9} 1 Sample Item
Hjem da {110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9} 1 Sample Item
CognifideCom en {6A1EC18E-AF9B-443E-84C7-5528F2363A10} 1 TenantTemplate
Demo en {4F02AEDF-1CC6-4B84-8B6E-F5CB465F8AD9} 1 TenantTemplate
GetEngaged en {68AD4037-EE50-4615-BA2E-AE11B1D3F6CC} 1 TenantTemplate
GetEngaged de-DE {68AD4037-EE50-4615-BA2E-AE11B1D3F6CC} 1 TenantTemplate
GetEngaged es-ES {68AD4037-EE50-4615-BA2E-AE11B1D3F6CC} 1 TenantTemplate
GetEngaged pt-BR {68AD4037-EE50-4615-BA2E-AE11B1D3F6CC} 1 TenantTemplate
GetEngaged pl-PL {68AD4037-EE50-4615-BA2E-AE11B1D3F6CC} 1 TenantTemplate
Getting items by Path with Sitecore query
t's not always most efficient to operate on items by traversing the tree using
Get-ChildItem
. This is especially true if you need to work on large trees but need to select only a few items (e.g. a specific template). For this we’ve introduced support for the Sitecore query within our provider.
Example: The following retrieves all items beneath the path /sitecore/content/ with the template of Sample Item.
PS master:\> Get-Item -Path master: -Query "/sitecore/content//*[@@templatename='Sample Item']"
Name Children Languages Id TemplateName
---- -------- --------- -- ------------
Copy of Home True {en, de-DE, es-ES, pt... {503713E5-F9EE-4847-AEAF-DD13FD853004} Sample Item
Home True {en, de-DE, es-ES, pt... {110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9} Sample Item
Example: The following retrieves all items beneath the path /sitecore/content/ with the template of Sample Item in all versions and languages.
PS master:\> Get-Item -Path master: -Query "/sitecore/content//*[@@templatename='Sample Item']"
-Language * -Version * | Format-Table DisplayName, Language, Id, Version, TemplateName -AutoSize
DisplayName Language ID Version TemplateName
----------- -------- -- ------- ------------
Copy of Home en {503713E5-F9EE-4847-AEAF-DD13FD853004} 1 Sample Item
Home de-DE {503713E5-F9EE-4847-AEAF-DD13FD853004} 1 Sample Item
Copy of Home pl-PL {503713E5-F9EE-4847-AEAF-DD13FD853004} 1 Sample Item
Copy of Home en-US {503713E5-F9EE-4847-AEAF-DD13FD853004} 1 Sample Item
Hjem da {503713E5-F9EE-4847-AEAF-DD13FD853004} 1 Sample Item
Home en {110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9} 1 Sample Item
Home de-DE {110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9} 1 Sample Item
Home pl-PL {110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9} 1 Sample Item
Home en-US {110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9} 1 Sample Item
Home en-US {110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9} 2 Sample Item
Home en-US {110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9} 3 Sample Item
Home en-GB {110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9} 1 Sample Item
Hjem da {110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9} 1 Sample Item
Get items by Id
Example: The following retrieves an item by id.
PS master:\> Get-Item -Path master: -ID "{110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9}"
Name Children Languages Id TemplateName
---- -------- --------- -- ------------
Home True {en, de-DE, es-ES, pt... {110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9} Sample Item
Get items by Uri
The Uri encodes the language and version within the path.
Example: The following retrieves an item by uri.
PS master:\> Get-Item -Path master: -Uri "sitecore://master/{110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9}?lang=en&ver=1"
Name Children Languages Id TemplateName
---- -------- --------- -- ------------
Home True {en, de-DE, es-ES, pt... {110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9} Sample Item
In all the examples you'll notice we specified the database. Windows PowerShell needs to know which provider to execute within. This also signals to SPE to show the dynamic parameters.
Changing item properties
We often see the following two ways of accessing and changing fields used in scripts. One uses
Set-ItemProperty
and the other is more natural to a Sitecore developer.
Example: The following sets the title property using
Set-ItemProperty
.PS master:\> Set-ItemProperty -Path master:/content/home -Name "Title" -Value "New Title"
Example: The following sets the title property using
.Editing.BeginEdit
and .Editing.EndEdit
methods.$item = Get-Item master:/content/home
$item.Editing.BeginEdit()
$item["Title"] = "New Title"
$item.Editing.EndEdit()
Note: The above example may also be written in the ISE where no console prompt is visible.
The previous examples work but are not the most efficient ways to change item content. The items returned by the provider expose the Sitecore item fields as automated PowerShell properties.
Example: The following sets the title property using the automated PowerShell property.
$item = Get-Item master:/content/home
$item.Title = "New Title"
Example: The following sets the title property using the semi-native PowerShell property without the use of a variable.
(Get-Item master:/content/home).Title = "New Title"
Some other useful Examples that might help you to dig more into sitecore powershell:
EXAMPLE:-
$item=Get-Item -Path master: -Query "/sitecore/content/Home[@Related To Division = '']"
$item.Editing.BeginEdit()
$item["Related To Division"] ="{A43E680A-F5BD-4CC0-A4A0-AF5A53163447}"
$item.Editing.EndEdit()
$item.Editing.BeginEdit()
$item["Related To Division"] ="{A43E680A-F5BD-4CC0-A4A0-AF5A53163447}"
$item.Editing.EndEdit()
Above example is useful for checking the field value for particular location. In above example we are also able to use
$item.Fieldname or $item.Title but if we have space in field then it is not work we need to use like:$item["Related To Division"]
EXAMPLE:-
$items=Get-Item -Path master: -Query "/sitecore/content//*[@Related To Division = ""]"
$items.Editing.BeginEdit()
foreach ($item in $items)
{
$item["Related To Division"] ="{A43E680A-F5BD-4CC0-A4A0-AF5A53163447}"
}
$items.Editing.EndEdit()
$items.Editing.BeginEdit()
foreach ($item in $items)
{
$item["Related To Division"] ="{A43E680A-F5BD-4CC0-A4A0-AF5A53163447}"
}
$items.Editing.EndEdit()
Above example is useful for checking the field value for all child's below the specified node.
I hope these examples help you for understanding the Sitecore PowerShell & you can dig more for enhance your knowledge but never miss to share your knowledge with us.
Other useful Links:
http://blog.najmanowicz.com/2014/10/12/working-with-sitecore-items-in-powershell-extensions/https://sitecorepowershell.gitbooks.io/sitecore-powershell-extensions/content/item-languages.html
https://sitecorepowershell.gitbooks.io/sitecore-powershell-extensions/content/working-with-items.html
http://coreblimey.azurewebsites.net/sitecore-and-powershell-feel-like-he-man/
http://blog.najmanowicz.com/sitecore-powershell-console/
https://sitecorejunkie.com/2014/06/02/make-bulk-item-updates-using-sitecore-powershell-extensions/
Thanks
Arun Sharma