Add Scripts to the PowerShell Toolbox in Sitecore PowerShell Extensions
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!