Platform & Ops

Sitecore PowerShell Common Utilities

CI pipeline visualization on screen
Photo: Danial Iglesias / Unsplash · Royalty-free

Below are some Sitecore PowerShell Common Utilities:   # Get a list of all Sitecore users $lstSitecoreUsers = Get-User -Filter “sitecore\*” $lstSitecoreUsers | ForEach-Object  { Write-Host $_.Name }   # Get a list of Admin users only $lstSitecoreUsers = Get-User -Filter “sitecore\*” $lstSitecoreUsers | Where{$_.IsAdministrator -eq $true } | ForEach-Object  { Write-Host $_.Name }   # Get a list of users who are managers $lstSitecoreUsers = Get-User -Filter “sitecore\*” $lstSitecoreUsers | Where{$_.Name -like “*manager*” } | ForEach-Object  { Write-Host $_.Name }   # Get a List of all items under a node – e.g Home $allItemsUnderHome = Get-Item master: -Query “/sitecore/content/Home//*” $allItemsUnderHome | ForEach-Object { Write-Host “Item name: ” + $_.Name }   # Update an Item – e.g. Test Items under Home $item = Get-Item “master:/sitecore/content/Home/Test” $item.Editing.BeginEdit(); $item[“Header Title”] = “New title for the test item here”; $item.Editing.EndEdit();   # Get a list of items update in last ‘x’ number of days e.g 30 days Get-Childitem -Path “master:/sitecore/content/Home”  -recurse | Sort $_.”__Updated” | Where-Object   {  $_.”__Updated” -gt (Get-Date).AddDays(-30) }   # Show results in a List View – Get a list of items update in last ‘x’ number of days e.g 30 days get-childitem -Path “master:/sitecore/content/Home” -recurse | ` Sort $_.”__Updated” | ` Where-Object   {  $_.”__Updated” -gt (Get-Date).AddDays(-30) }    | Show-ListView -property Name, ` @{Label=”Last Updated Date”; Expression={$_.”__Updated”}}, ` @{Label=”Last Updated By”; Expression={ $_.”__Updated By” } } ` -Modal -Width 690 -Height 600 -PageSize 200 Show-Result -Text   # Find and Replace – e.g. Find all items under Home with template ‘Generic Page’ and update/replace their ‘Header Subtitle’ with ‘Header title’ Get-Childitem -Path “master:/sitecore/content/Home” -recurse ` | Where-Object { $_.TemplateName -match “Generic Page”  } ` | ForEach-Object { $_.”Header Subtitle” = $_.”Header Title”}   # Remove or Create Users, setting user permissions(adding and removing permissions) $usr =”sitecore\testuser001.admin”; Remove-User -Identity $usr -ErrorAction SilentlyContinue; New-User -Identity $usr -Enabled -Password “testpwd001” -Email “[email protected]” -FullName “Test User 001” -ErrorAction SilentlyContinue; Set-User -Identity $usr -IsAdministrator $true; @(“sitecore\ContentOwner,sitecore\ContentAuthor”).Split(‘,’).Trim()
|
ForEach-Object { Remove-Rolemember -Identity $_ -Members $usr -ErrorAction SilentlyContinue; Add-Rolemember -Identity $_ -Members $usr -ErrorAction SilentlyContinue; }   # assign specific security rights to an item
$theHeader = Get-ChildItem -Path “master:/Sitecore/Content/Header” -ErrorAction SilentlyContinue if($theHeader -ne $null) {
@(“item:create”,”item:write”,”item:delete”,”item:rename”) | ForEach-Object {
$aclRight = $_ $acl1 = New-ItemAcl -AccessRight $aclRight -PropagationType Any -SecurityPermission AllowAccess -Identity “sitecore\Content Owner”
$acl2 = New-ItemAcl -AccessRight $aclRight -PropagationType Any -SecurityPermission AllowAccess -Identity “Content Author” $theHeader | Add-ItemAcl -AccessRules $acl1,$acl2
}
}   # Compare/Count items in Sitecore databases(Master and Web) $childsMaster = Get-ChildItem master:/sitecore/content/Catalog/Products -Language en-CA -Version *
$childsMaster= $childsMaster | Where { $_.ProductExpireDate -gt (Get-Date) } #| ForEach-Object {$_.ProductExpireDate}
write-host “Count of items Canada Product Catalog(Master): ” $childsMaster.length $childsWeb = Get-ChildItem web:/sitecore/content/Catalog/Products -Language en-CA -Version *
$childsWeb= $childsWeb | Where { $_.ProductExpireDate -gt (Get-Date) } #| ForEach-Object {$_.ProductExpireDate}
write-host “Count of items Canada Product Catalog(Web): ” $childsWeb.length #write-host “Compare master Vs Web Databases”
Compare-Object $childsMaster $childsWeb -PassThru   # Compare items in different master and Slave Solr $items_product_index_master = wget “http://solrslave.companysite.com/solr/product_index_master/select?q=product_id%3A*&fq=_language%3Aen-US&rows=9999&fl=product_id&wt=json&indent=true” | ConvertFrom-Json
write-host “Count of items product_index_master: ” $items_product_index_master.response.numfound
#$items_product_index_master.response.docs.product_id $items_product_index_web = wget “http://solrmsater.companysite.com/solr/product_index_web/select?q=product_id%3A*&fq=_language%3Aen-CA&rows=9999&fl=product_id&wt=json&indent=true” | ConvertFrom-Json
write-host “Count of items product_index_web: ” $items_product_index_web.response.numfound
#$items_product_index_web.response.docs.product_id #write-host “Compare product_index_master Vs product_index_web”
Compare-Object ($items_product_index_master.response.docs.product_id) ($items_product_index_web.response.docs.product_id)   # Compare items in sitecore database and Solr #write-host “Compare Master Database Vs product_index_web”
Compare-Object ($childsMaster.ProductID) ($items_product_index_web.response.docs.product_id) -PassThru   # Remove items or fields of an item/template ( lets say we want to remove Header Subtitle and Footer SubTitle, use Remove-Item
@(
‘master:/sitecore/templates/Rendering Templates/Header/Header SubTitle’,
‘master:/sitecore/templates/Rendering Templates/Footer/Footer SubTitle’
)| ForEach-Object {
$items = Get-Item -Language * -Path $_ -ErrorAction SilentlyContinue
$items | Remove-Item -ErrorAction SilentlyContinue
} # Remove  specific language versions only of ‘Header Parameters/__Standard Values’ except say English (en), use Remove-ItemLanguage
@(
‘master:/sitecore/templates/Rendering Templates/Header/Header SubTitle/__Standard Values’, ‘master:/sitecore/templates/Rendering Templates/Footer/Footer SubTitle/__Standard Values’
)| ForEach-Object {
$items = Get-Item -Language * -Path $_ -ErrorAction SilentlyContinue
$items | ForEach-Object {
if($_.Language.Name -ne “en”){
$_ |Remove-ItemLanguage -ErrorAction SilentlyContinue
}
}
}   ….more to continue…