The Blog is Back!and I Made a Change!
Learn more featured post
October, 2008

PowerShell Scripts for Deploying VDI Replicas

Recently Chad Sakac wrote an article on using some PowerShell scripts to quickly deploy VDI replicas.  As always, it’s a very good article but I wanted to expound a bit on what he has written and provide more instruction on setup and use.  I have had the opportunity to use and demo these scripts lately and wanted to pass along some things that I have learned.  The scripts, PowerVDI, were originally written by Dan Baskette, his blog is here.

If you want to see how these scripts function without actually doing it yourself….or to see how they work before starting this I have provided a demonstration video.  In this video I walk you through creating 10 virtual workstations and then add 4 more.  The video is available here:

The purpose of the PowerVDI scripts is to allow you to quickly and easily deploy new virtual workstations with VDI and an EMC Celerra.  They interface with Virtual Center, VDM Server, and the Celerra CLI. Instead of just cloning an existing image these scripts utilize the Read/Write snapshot capability of the Celerra.  This lets you deploy a large number of workstations without dedicated a large amount of storage.  A deployment of 50 virtual workstations takes little more storage than a single workstation….well, until users start adding applications and data!

If you don’t have a Celerra to play with these scripts work just fine with the Celerra Simulator.  Information on downloading the Simulator and getting it set up are available from Chad here.

The scripts automate the following steps:

  1. Query the user for appropriate information (cluster names, VDI datastore, etc).
  2. Create a read/write snapshot for each requested VM replica.
  3. Promote the snapshot to a LUN and attach it to the iSCSI Target on the Celerra.
  4. Instruct the ESX servers to rescan their HBAs to find the new LUNs.
  5. Connect to the new LUNs/Datastores.
  6. Rename the datastores so each one matches its respective VM replica.
  7. Register each VM in to Virtual Center.
  8. Optionally boot the new VMs.
  9. Add the VDI Pool and VMs to the VDM server.

Currently the scripts do not customize the replica VMs.  The gold image should be sysprep’d and configured to join the domain themselves.  In the future we should see scripts that take the customization further, similar to what you can do with a Customization Spec to a new VM today.

The required pieces for the environment are:

  • Two ESX servers in a cluster
  • EMC Celerra
  • Resource Group named VDI
  • Virtual Center 2.5
  • VMware Desktop Manager
  • Standard infrastructure such as DHCP, DNS, and Active Directory
  • iSCSI LUN containing a “Gold Image” workstation

You will need the following information for configuration:

  • Celerra management IP address
  • Login for Celerra that can create snapshots
  • Virtual Center IP address
  • Virtual Center login
  • VDM IP address
  • Gold Image Datastore name

Pretty simple, eh?  Now for the software pieces.  You’ll need to download and install these pieces of software:

Installation and Configuration

Download and install all of the pieces listed above.  If you don’t use the default directories make sure you edit the .bat file included with the PowerVDI scripts so they run correctly.  Once everything is installed open a PowerShell window and type:

set-executionpolicy unrestricted

This will allow the scripts to run.  The next step is to configure putty.  Run puttygen.exe and have it generate a private key by randomly moving your mouse.  I suggest you don’t do this step via the Remote Desktop client!  The update interval is so low that it takes a loooong time to do that remotely.  Learn from my mistake…  Once the key is finished generating save it to a file named c:program filesputtyprivkey.ppk.  That name is VERY important.  Next, you should see your key shown.  It looks similar to this:


Copy that text in to your clipboard.  Next, open putty.exe and SSH in to your Celerra as the user you plan to use when running the scripts, usually nasadmin.  From that user’s home directory you need to create a directory named .ssh (notice the dot).

md .ssh

Next change to the .ssh directory and paste the key in to a new file named authorized_keys.  I normally use vi but I know not everyone is a fan.  Type “vi authorized_keys”, hit “a”, paste the key (right-click in putty to paste), then hit the ESC key, at the prompt at the bottom type “!wq”.  That will write the file and exit.  Finally, we need to set the permissions on this new file and the .ssh directory.  From the .ssh directory type “chmod 600 authorized_keys”.  Change back to your home directory (cd ..) and type “chmod 700 .ssh”.  The purpose of this is to allow connections to the Celerra using Putty without having to use a password, instead it uses your generated keys to provide authentication.

One more step and you’re done in Linux.  You need to add some PATH variables to the .bashrc file.  From the user’s home directory type “vi .bashrc”.  Move the cursor down to a blank line and hit “a” and then paste this to the file:

    export NAS_DB=/nas

Finally, hit ESC to exit text entry and then type “!wq” to write the file and exit.  You can now log out of the Celerra.  You’re done with configuration!

Now you can run the powervdi3.bat file to execute the script.  You’ll be prompted for the information mentioned above.  If you encounter a problem during execution check the log file created by the script.  It will provide the command issued to the Celerra and any response. When the script is run it creates several configuration files holding the information you provided, snapshot names, and VMs created.  If you run the script a second time it won’t need to prompt you for the same information.  During subsequent executions if you provide the name of an existing VDI Pool it will add new VMs to that pool.  If you provide the name of a new pool it will create an additional pool.

If you want to reset your environment and undo anything you did you can use the democlean.bat.  Note that this script will throw some errors..and that is normal.  Just provide it with the name of the VDI Pool you want to remove.  This is useful too if you should have a problem during creation.  The democlean.bat will still clean up snapshots are partial machine creations.  It uses the information it logged in the configuration files.

Good luck!  Feel free to ask questions if you run in to a problem.

1 thought on “PowerShell Scripts for Deploying VDI Replicas”

  1. I am trying to implement this with our current emc celerra. So far we have gotten as far as connecting with the private key but when it actually tries to begin the snaps it just hangs. Any info on this issue would be much appreciated.

Leave a Reply

Your email address will not be published. Required fields are marked *