UBERShell : Ninja Scripting

Every time I release a tool or write a blog post there is a voice in the back of my head saying, “Dude, no one is going to like this”. I think this is the first time that voice never said a word. From the beginning it was more of a question of how to make this work the way I wanted. And when I started to be able to play with it myself, I was blown away with how lucky I got in the final product.

I am not saying this was easy. Lost sleep, a good portion of my twitter feed, and calluses on my finger-tips are all symptoms of me trying to get this bad-boy out. I have been working in a new capacity in the vSpecialist team and working on some secret sauce for some of our bigger customers. As part of that work I realized I could reuse some of the code I was creating to fill a gap.

So after two weeks of late-night and weekend work I excited to present UBERShell: Powershell cmdlets for managing EMC Celerra storage.

This Powershell Snapin is written from the ground up to be as easy and extendible as possible. From the beginning I didn’t know if I could pull this off and I must say as it started to come to fruition I started to get really excited with the results. I went a different direction that some integrations with the Celerra have gone and I opted to do 100% of the code myself instead of borrowing from other libraries.

Here are some of the cool features:

  • Easy install for x86 or x64 Powershell. Just install the version you want. Open the Powershell or PowerCLI (x86 or x64) command window and type “Add-PSnapin UBERShell”. This includes the PowerCLI command window.
  • The workstation/server running UBERShell just needs HTTPS access to Unisphere. No extra ports or heavy connections. Everything is lightweight secure calls through HTTPS.
  • Every component is object based(no flat strings). This means wide-open possibilities for you Powershell-maniacs.
  • Right now there are cmdlets for Datamover, Storage Pool, Filesystem, Mounts, NFS Exports, ISCSI Luns/Masks/Service/Targets, Checkpoints, and DHSM.
  • Login is preserved in a session and you can change Celerra systems mid-script.
  • All command calls are tuned giving very quick responses even on the Celerra UBER VSA.
  • 100% compatible with the Celerra UBER VSA.
  • You can combine with VMware’s PowerCLI to provision storage to vSphere environments all in automated scripts.

And here are a list of Cmdlets:

  • Connect-Celerra : Connects to a Celerra system and caches login in the Powershell session.
  • Create-Export : Creates an NFS Export on the supplied File System(s) and Datamover(s).
  • Create-FilesystemUsingPool : Create a new File System on the supplied Storage Pool.
  • Create-Interfaces : Creates new Interface with supplied Netwoprk Device and Datamover.
  • Create-iSCSILUN : Creates an iSCSI LUN on the supplied Target and Datamover.
  • Create-iSCSITarget : Creates an iSCSI Target on the supplied Datamover(s).
  • Create-Mount : Mounts supplied File System on the supplied Datamover(s).
  • Delete-Export : Deletes the supplied NFS Export (requires confirmation).
  • Delete-Filesystem : Delete the supplied File System from the Celerra (requires confirmation).
  • Delete-Interfaces : Deletes existing supplied Interface from Datamover(requires confirmation).
  • Delete-iSCSILUN : Deletes an iSCSI LUN on the supplied Target and Datamover(requires confirmation).
  • Delete-iSCSITarget : Deletes an iSCSI Target on the supplied Datamover(s)(requires confirmation).
  • Delete-Mount : Unmounts supplied File System on the supplied Datamover(s).
  • Get-CelerraInfo : Retrieve information on currently connected Celerra.
  • Get-Checkpoint : Retrieve list of Checkpoints for supplied File System(s).
  • Get-DataMovers : Retrieve list of Datamovers for connected Celerra Storage System.
  • Get-Export : Retrieve list of Exports for supplied File System(s).
  • Get-FileSystem : Retrives list of File Systems. Use the ‘-ShowRoot’ for root/system file systems.
  • Get-Interfaces : Gets a list of Interfaces on supplied Datamover(s).
  • Get-Interfaces : Retrieve list of Network Interfaces for supplied Datamover(s).
  • Get-iSCSIISNSInfo : Retrieve information on iSCSI/ISNS for supplied Datamover(s).
  • Get-iSCSILUNs : Retrieve list of iSCSI LUNs for supplied Datamover(s).
  • Get-iSCSIMasks : Retrieve list of iSCSI Masks for supplied Datamover(s).
  • Get-iSCSIServiceInfo : Retrieve information on iSCSI Service for supplied Datamover(s).
  • Get-iSCSITargets : Retrieve list of iSCSI Targets for supplied Datamover(s).
  • Get-Mount : Retrieve list of Mounts for supplied Datamover(s).
  • Get-NetworkDevices : Gets a list of physical Datamover Network Devices on supplied Datamover(s).
  • Get-UBERShellCommands : Show this list.
  • Get-UBERShellHelp : Information on the UBERShell Powershell Snapin.
  • Get-UBERShellInfo : Open community support websites for UBERShell.
  • Set-iSCSIMaskClearInitiator : Clears Initiator from mask lists.
  • Set-iSCSIMaskDeny : Removes access for Initiator on supplied LUN(s).
  • Set-iSCSIMaskGrant : Grants access for Initiator on supplied LUN(s).
  • Set-MountOptions : Allows changes to Mount options on supplied Mount(s).
  • Start-iSCSIService : Starts the iSCSI Service on the supplied Datamover(s).
  • Stop-iSCSIService : Stops the iSCSI Service on the supplied Datamover(s).

Without a doubt I think this is my favorite tool that I have been lucky enough to create. I had so much fun playing with it while I was writing it. It is crazy how fast you can create/modify/delete(with confirmation) configurations using this.

Below I have a couple videos demonstrating the UBERShell. Watch them to get an introduction to how UBERShell works.

You can download UBERShell from here:

UBERShell x86
UBERShell x64

If you have comments or questions drop them below. Or hit the EMC Community site.

I hope this helps some peeps looking to accelerate their EMC Journey 🙂


EMC Featured Tools

24 Comments Leave a comment

  1. Great Job Nick,

    Great to see more EMC products being PowerShell enabled and UBERised, a few comments which I have seen from the PowerShell community which may help in V2 (knowing you you are already working on it)…

    1. I would try and use some sort of difrenciating naming convention, something like CL which could be used to ensure your cmdlets are not replicated in any other PowerShell snapin or module, when looking at the bigger picture and using these cmdlets with other snapins it makes sense as duplicated cmdlet names will be hard to use, I know there are ways around it but its just a nice thing to have… Get-CLMount etc etc

    2. I wouldnt use plurals in cmdlet names or parameters, the only way to have consistency is to have either all plurals or all singulars, having a mix will confuse people – i think you even got a little confused in one of your demos by typing the plural version 😉

    Small things but they all add up to an even better product !

    These are just my initial thoughts – as I said – amazing work my friend !

  2. Nick,
    I’ve been looking into your tools as a method of reporting on filesystem usage on my ns120. However, I’ve been confused at the results that the Get-FileSystems command returns from my ns120. It seems to me like the “Size” property is correct, but the other are approximately 2x the correct size… but not exactly. Can you explain to me how to read the other properties? Specifically “LogicalCapacity” “UsedCapacity” “FreeCapacity”. The results I get back for these properties are ruffly 2x the actual value displayed in Unisphere, but it can vary a lot.

    Thanks for your help.


  3. I must be brain dead but when I try to download UBERShell it prompts me to login to the FTP site and will not accept anonymous logins.

%d bloggers like this: