Last Wednesday I was honored to present Sitecore PowerShell Extensions (SPE) at the Milwaukee Sitecore Meetup. My presentation was all about how easy it is to add, execute and reuse PowerShell scripts in SPE, and I showcased this using version 3.0 of SPE on Sitecore XP 8.
During the presentation, I demonstrated how one can go about adding custom Item Context Menu options using SPE, and did so with the following scripts which bucket and unbucket Sitecore Items:
<# .NAME Convert To Item Bucket .SYNOPSIS Converts the context item to an Item Bucket .NOTES Mike Reynolds #> $item = Get-Item . if($item."__Is Bucket" -eq "1") { return } Get-ChildItem . -Recurse | %{ $_.__Bucketable = "1" } Invoke-ShellCommand -Name "item:bucket" -Item $item Close-Window
The above PowerShell script basically checks to see if an Item is an Item Bucket and does nothing if it is. If the Item is not an Item Bucket, we make sure all sub-items are bucketable — we just tick the “__Bucketable” Checkbox field on them — and invoke the Sheer UI command for converting an Item into an Item Bucket — this is done via the Invoke-ShellCommand commandlet that ships with SPE — and then close the script execution dialog users are presented with when SPE executes a script in the Item Context Menu.
The following script does the exact opposite of the script above — it converts an Item Bucket back to a regular Sitecore Item using the Sheer UI command for unbucketing:
<# .NAME Convert Item Bucket To A Regular Item .SYNOPSIS Converts an Item Bucket to a regular Item .NOTES Mike Reynolds #> $item = Get-Item . if($item."__Is Bucket" -ne "1") { return } Invoke-ShellCommand -Name "item:unbucket" -Item $item Close-Window
I then saved the above scripts to a Context Menu integration point in a SPE module I created during the presentation using the SPE Integrated Scripting Environment (ISE) (to get to the ISE in SPE, go to Sitecore ==> Development Tools ==> PowerShell ISE in the Sitecore Start menu of the Sitecore Desktop):
I’ve omitted screenshots on saving the “Convert Item Bucket To A Regular Item” script for brevity.
I then set rules in the “Show if rules are met or not defined” field on both Context Menu script Items — we only want the “Convert To Item Bucket” Context Menu option to show when the Item isn’t an Item Bucket, and the “Convert Item Bucket To A Regular Item” Context Menu option to show when the Item it is an Item Bucket:
The “Convert To Item Bucket” Context Menu item (this Item was saved to /sitecore/system/Modules/PowerShell/Script Library/SitecoreUG Module/Content Editor/Context Menu/Convert To Item Bucket in my Sitecore instance):
The “Convert Item Bucket To A Regular Item” Context Menu item:
After saving the above, I navigated to an Item in my content tree that has sub-items, right-clicked on it, and clicked on the “Convert To Item Bucket” Context Menu option:
I was then presented with a confirmation dialog:
As you can see the Item is now an Item Bucket:
I right-clicked on the Item again, and clicked on the “Convert Item Bucket To A Regular Item” Context Menu option:
I was presented with another confirmation dialog:
As you can see the Item is no longer an Item Bucket:
If you have any thoughts on this or ideas for other Context Menu PowerShell scripts for SPE, please drop a comment.
If you would like to watch the Milwaukee Sitecore Meetup presentation where I showed the above — you’ll also get to see some cool Sitecore PowerShell Extensions stuff from Adam Brauer, Senior Product Engineer at Active Commerce, in this presentation as well — have a look below:
Until next time, have a Sitecoretastic day!