During our ‘Take charge of your Sitecore instance using Sitecore tools’ session at Sitecore Symposium 2014 Las Vegas, Sitecore MVP Sean Holmesby and I shared how easy it is to leverage/extend popular Sitecore development tools out there, and built up a fictitious Sitecore website where we pulled in #SitecoreSelfie Tweets.
The code that pulls in these Tweets is supposed to follow a naming convention where Tweet IDs are appended to Media Library Item names, as you can see here:
Sadly, right before our talk, I mistakenly 😉 made a code change which broke our naming convention for some images:
Upon further investigation, we had discovered our issue was much larger than anticipated: all Selfie Media Library Item names do not end with their Tweet IDs:
To fix this, I decided to create a PowerShell Toolbox script in Sitecore PowerShell Extensions using the following script:
<# .SYNOPSIS Rename selfie image items to include tweet ID where missing. .NOTES Mike Reynolds #> $items = Get-ChildItem -Path "master:\sitecore\content\Social-Media\Twitter\Tweets" -Recurse | Where-Object { $_.TemplateName -eq "Tweet" } $changedItems = @() foreach($item in $items) { $tweetID = $item["TweetID"] $selfieImageField = [Sitecore.Data.Fields.ImageField]$item.Fields["SelfieImage"] $selfieImage = $selfieImageField.MediaItem if($selfieImage -ne $null -and -not $selfieImage.Name.EndsWith($tweetID)) { $oldName = $selfieImage.Name $newName = $oldName + "_" + $tweetID $selfieImage.Editing.BeginEdit() $selfieImage.Name = $newName $selfieImage.Editing.EndEdit() $changedItem = New-Object PSObject -Property @{ Icon = $selfieImage.Appearance.Icon OldName = $oldName NewName = $newName Path = $selfieImage.Paths.Path Alt = $selfieImage["Alt"] Title = $selfieImage["Title"] Width = $selfieImage["Width"] Height = $selfieImage["Height"] MimeType = $selfieImage["Mime Type"] Size = $selfieImage["Size"] } $changedItems += $changedItem } } if($changedItems.Count -gt 0) { $changedItems | Show-ListView -Property @{Label="Icon"; Expression={$_.Icon} }, @{Label="Old Name"; Expression={$_.OldName} }, @{Label="New Name"; Expression={$_.NewName} }, @{Label="Path"; Expression={$_.Path} }, @{Label="Alt"; Expression={$_.Alt} }, @{Label="Title"; Expression={$_.Title} }, @{Label="Width"; Expression={$_.Width} }, @{Label="Height"; Expression={$_.Height} }, @{Label="Mime Type"; Expression={$_.MimeType} }, @{Label="Size"; Expression={$_.Size} } } else { Show-Alert "There are no selfie image items missing tweet IDs in their name." } Close-Window
The above PowerShell script grabs all Tweet Items in Sitecore; ascertains whether referenced Selfie images in the Media Library — these are referenced in the “SelfieImage” field on the Tweet Items — end with the Tweet IDs of their referring Tweet Items (the Tweet ID is stored in a field on the Tweet Item); and renames the Selfie images to include their Tweet IDs if not. The script also launches a dialog showing the images that have changed.
To save the above script in the PowerShell Toolbox, I launched the PowerShell Integrated Scripting Environment (ISE) in Sitecore PowerShell Extensions:
I pasted in the above script, and saved it in the PowerShell Toolbox library:
As you can see, our new script is in the PowerShell Toolbox:
I then clicked the new PowerShell Toolbox option, and was presented with the following dialog:
The above dialog gives information about the images along with their old and new Item names.
I then navigated to where these images live in the Media Library, and see that they were all renamed to include Tweet IDs:
If you have any thoughts on this, or suggestions for other PowerShell Toolbox scripts, please share in a comment.
Until next time, have a #SitecoreSelfie type of day!
[…] some of the blogs from the Sitecore community I find it pretty apparent that we didn’t do a great job […]
[…] you would like to see another example of adding a script to the SPE Toolbox, please see my previous post on this […]