PowerCLI: Add & remove VMs from DRS Groups based on datastore location

Lately I have been working on a number of virtualization projects which make use of VMware vSphere Metro Storage Clusters (vMSC). With most of these types of implementations, virtual machines must be pinned to a preferred site to minimise impact to virtual machines in the event of a site failure. DRS groups are the most common way to achieve this, however I was wanting to find a way to automate the add/remove of virtual machines based on each VM’s datastore location.

To begin, I configured each of the datastores with a prefix of the site which was its preferred site, e.g. DC1-VMFS-01 or DC2-VMFS-01. I then placed VMs on a datastore which corresponded to their preferred site.

With the help of DRSRule I was then able to create two PowerCLI functions to automate the process to add the VMs to a corresponding DRS VM group based on their datastore location. The function can be used with a datastore name, prefix or suffix.

This worked perfectly well, but what I soon discovered is that if a user migrated a VM to another datatore then a VM could potentially be a member of two DRS groups. So I created an additional function to remove VMs from DRS groups also.

Now using each function I can now add and remove VMs from pre-existing DRS Groups based on their datastore location.