Category Archives: PowerShell

Dell Storage Volume Cleanup with PowerShell

If you’re new to PowerShell with Dell Storage, be sure to take a look at this post.  Depending upon the size of system that your managing, over the course of time, you might have experienced some challenges in managing disk resources, especially if you’re using an array in a lab-type environment.

Here’s an easy way to inventory volume objects on your SC Series array which are not currently mapped, and also find out how much actual space they’re consuming. Continue reading

PowerShell Scripting Options for Dell Storage

Back in 2008, Compellent released their first iteration of the PowerShell Command Set.  They were the first storage vendor on the scene to provide PowerShell automation capabilities with the Series 40 array.

Fast forward a bunch of years.  The PowerShell Command Set has grown from 50 cmdlets to over 100, and added the capability to work with more advanced features like replication and Live Volume. Continue reading

Do Your Exchange Online Admin Tasks with PowerShell

There are some things in Exchange that you just need to use PowerShell for.  If you use Exchange Online or Office 365, the web portal exposes a lot of the admin functionality that you might need, but there are certain actions that require PowerShell.

Accessing the Exchange PowerShell cmdlets on a local server is one thing, but accessing those cmdlets in a hosted environment can be a little trickier.  After I had to type these a half-dozen times, my brain wasn’t getting it quite yet, so I build a little script that covers what you need to need to establish a connection to the remote Exchange environment.

Continue reading

Be More Fluid with the New Storage Center Command Set for PowerShell

Windows PowerShell was designed as a scripting language to help IT administrators automate repetitive tasks that could otherwise be error-prone by nature and in return free administrators to focus on other activities of the IT Pro. 

We began the voyage over two years ago in expanding the capabilities of automation with the Compellent Storage Center by creating the Compellent Storage Center Command Set for Windows PowerShell.  As the first storage vendor on the PowerShell scene, we offered over 60 cmdlets in our 1.0 release to handle anything from user management and alerting, to storage provisioning and volume management for the Windows platform.

In just a short time from now, Compellent will be releasing its new version of the Storage Center Command Set 6.0.  This new version includes a number of features including new cmdlets that support the configuration and management of a new Storage Center feature called Live Volume, as well as Remote Instant Replay.  Along with new features, the syntax of many of the existing cmdlets have changed to simplify their use, provide naming consistency across cmdlets, as well as increase the availability of pipelining results from one cmdlet to another.  Watch for future posts where we’re cover some of the newness in more detail.

How is PowerShell and the Compellent Command Set being used in your environment?  Leave me a note – I’d love to hear your story!

Watch for more updates on Compellent’s Blog: Around the Block.

Compellent PSCS One-Liner Coding: Tip #2

With Compellent Storage Center 5, you have the ability to control whether an alert is generated for individual servers when connectivity changes.

This means when your server reboots or you switch around cables (in your lab environment of course), these alerts are triggered and show up in the system alerts as well as the GUI which presents a “stop light” that isn’t green.

You can control this connectivity per server in the Storage Center Manager, or perhaps you want to disable it for all of your lab servers.  Here’s a simple way to do so.  In this example I take the servers that are in my folder on the Storage Center and turn off their connectivity alerts.

Get-SCServer -ConnectionName SC5 | ?{ $_.ParentFolder -eq "Justin" } | { Set-SCServer -Index $ _.Index -EnableConnectivityAlert:$false -ConnectionName SC5 }

Beginner hints: The usage of “?” in PowerShell is synonymous with “where”.  We use this to filter the Get-SCServer cmdlet in the above example.  Additionally, “%” is synonymous with “for-each”, also used in the example.


Compellent PSCS One-Liner Coding: Tip #1

The Compellent Storage Center provides in-depth reporting, alerting, and monitoring as part of the platform.  It’s very important for Storage Administrators to monitor and review the alerts (informational or otherwise) that might be generated on their Storage Center.

By design, alerts in the Storage Center will change the “stop-light” status from green to red, especially critical alerts where, for example, a component is malfunctioning or a path between the controllers and disk are down.  It is also by design that these alerts have to be acknowledged one-by-one in the Storage Center interface.

That being said, there are times when you might be performing some configuration changes or maintenance that could trigger alerts.  Having to acknowledge 10 alerts is one thing, but lets say you replaced a switch, and lets say there are now 50 alerts.  How can I acknowledge those quickly and easily using the Compellent Storage Center PowerShell Command Set?

Like this:

Get-SCAlert -ConnectionName SC12 | foreach {Acknowledge-SCAlert -Index $_.Index -ConnectionName SC12}

This will get a list of alerts from the connection I have previously saved using the Get-SCConnection cmdlet.  We then pipe that to the Acknowledge-SCAlert cmdlet which then acknowledges the alert on the Storage Center.  I just cleared my 50 alerts in less than a minute!

NOTE: It really is important to review the alerts that your system might be generating.  Use all script examples with caution.

Is Your PowerShell Slow to Start?

I ran into a scenario last week where we had loaded the Compellent Storage Center Command Set for Windows PowerShell on a server.  When we launched the shell shortcut, the window opened but took a long time to get to a PowerShell command prompt.

So, what causes slow start-up when loading PowerShell?

The most common reason seems to be that machines experiencing this slowness are not connected to the Internet.


Well, when Since PowerShell is loading the Compellent Command Set DLL externally, .NET has a security feature to check Microsoft’s CRL, or Certificate Revocation List.  This process verifies the authenticity and validity of the software publisher’s certificate.  If this check can’t reach the Internet, the process will time out after several minutes.  Now, this doesn’t prevent anything from loading (which seems odd), but it takes a couple minutes for a process that should take only a couple of seconds.

The easiest resolution at this point appears to allow Internet access to the server.  If that is not possible, you can disable the check for the publisher’s certificate revocation.  You can do this from Internet Explorer (or Control Panel, Internet Options) by clicking on Tools, Internet Options.  Under the Security section of the Advanced tab, uncheck “Check for publisher’s certificate revocation”.


NOTE: These type of security features are in place for a reason.  Take extreme caution when considering disabling these.

Search Your Compellent Storage Center Using Windows PowerShell

Using Windows PowerShell and the Compellent Storage Center Command Set for PowerShell, I have created a simple script that performs searches for server and volume objects providing results of each in addition to their related mappings.  This can be helpful if you have multiple levels of server or volume folders.

If you have ideas for scripts or would like to share your creations with other Compellent customers, check out the Forums at the Compellent Customer Portal. [authentication required]

Exchange 2010: Database Copies with PowerShell

I needed a quick and dirty method to add database copies to other servers in an Exchange 2010 Database Availability Group (DAG).  I had three servers, each with 10 databases.  Each one of those databases should have a copy on the other two servers. 

Now, this is painful if you have to use the GUI to do it – not that it takes a lot, but it’s time consuming.  The Add-MailboxDatabaseCopy cmdlet is very helpful in PowerShell, but still I wanted to automate it since my naming conventions were pretty standard.

So, I wrote a PowerShell script to automate this process.  Essentially, the script has a few variables and I dome some loop magic to drop everything into place. 

This script is quick and dirty for a lab environment.  Keep in mind that this doesn’t do any error checking and there is no validation to see if a database is already homed to a server.  This just uses the cmdlet to try to create the database copy; if it is successful, you’re good to go.  If it fails, the script just keeps on rolling.  No harm, no foul.