XenServer PowerShell 101

Over two years ago I discovered PowerShell as a very usefull scripting language to support the fully automated install and config of a Windows 2008 Office Automation domain with XenApp and RES Software products. Thanks to RES Automation Manager (back than it was still called Wisdom) I could easily build PowerShell scripts to create the required Active Directory structure, Exchange environment and use small scripts for different configurational settings. RES Automation Manager ensured I only needed to concentrate on the actual scripts, as I could configure the Tasks options to ensure the correct execution rights were used and the required snap-ins were loaded by specifying the use of a PowerShell configuration file (.psc1).


This blog is all about reconnecting with PowerShell as I want to explore the PowerShell SnapIn for XenServer 6.0.
A quick overview of the available commands is provided with a great poster from Björn Andersson (diversetips.se) for XenServer 6.0:

This blog will be all about the basic PowerShell commands to setup my scripting environment and slowly build up to more complex scripts for XenServer management.


Installing the XenServer PowerShell SnapIn

For directions on the installation of the XenServer SnapIn, you can check out a post I wrote about it a while ago, as 64-bits environments (or environments using UAC, which require the use of an elevated Command Prompt) need some additional steps to register the SnapIn correctly.

So keep in mind two commands to correctly register the SnapIn for use with PowerShell:

  • Register the XenServer SnapIn for x86:
C:\Windows\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe "C:\Program Files (x86)\Citrix\XenServerPSSnapIn\XenServerPSSnapIn.dll"
  • Register the XenServer PowerShell SnapIn for x64:
C:\Windows\Microsoft.NET\Framework64\v2.0.50727\InstallUtil.exe "c:\Program Files (x86)\Citrix\XenServerPSSnapIn\XenServerPSSnapIn.dll"


Using the PowerShell SnapIn

So let’s fire up the PowerShell shell and get started with the basics.

* Check the available PowerShell SnapIns:

To check which snapins can be used within your PowerShell environment, you can run the Get-PSSnapin command:

PS C:\Users\admin> Get-PSSnapin -registered

Name        : XenServerPSSnapIn
PSVersion   : 2.0
Description : Citrix XenServer PowerShell SnapIn

By checking the registered SnapIns, you can also verify the name used for the snapin, which will be used for reference purposes in other functions.


* Load a SnapIn:

To use the cmdlets from a snapin, you first need to load it with the Add-PSSnapin command:

PS C:\Users\admin> Add-PSSnapin XenServerPSSnapIn


* Check the available cmdlets:

To check if the snapin is correctly loaded, or just to see a list of the available cmdlets provided by a snapin or module, you can use the Get-Module command:

PS C:\Users\admin> Get-Command -Module XenServerPSSnapIn

CommandType     Name                                         Definition                                  
-----------     ----                                         ----------                                  
Cmdlet          About-XenServer                              About-XenServer [-InstallLocation] [-Vers...
Cmdlet          Add-XenServer:Bond.OtherConfig               Add-XenServer:Bond.OtherConfig [[-Bond] <...
Cmdlet          Set-XenServer:VMPP.NameLabel                 Set-XenServer:VMPP.NameLabel [[-VMPP] <Ob...
Cmdlet          Wait-XenServer:Task                          Wait-XenServer:Task [[-Task] <Object>] [-...


Using a config file to preconfigure the PowerShell environment

For those of us, that would prefer to preload the required PowerShell SnapIns, it is possible to create a PowerShell configuration file (.psc1) and start the PowerShell Prompt with the preloaded SnapIns.
For the XenServer SnapIn you can use the predefined XenServerPSSnapIn.psc1 file, located at C:\Program Files (x86)\Citrix\XenServerPSSnapIn, which contains the following settings:

<?xml version="1.0" encoding="utf-8"?>
<PSConsoleFile ConsoleSchemaVersion="1.0">
    <PSSnapIn Name="FindStringPSSnapIn" />

If you want to preload these settings, you can use the -PSConsoleFile option with powershell.exe to start a PowerShell Prompt with the predefined configuration and have the SnapIn automatically loaded and ready for use.
I use the following shortcut to automatically start a preconfigured PowerShell environment, as a shortcut was not automatically created when I installed the XenServer SDK for PowerShell:

%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -PSConsoleFile "C:\Program Files (x86)\Citrix\XenServerPSSnapIn\XenServerPSSnapIn.psc1"


I know this blog only offers some basic PowerShell startup information, but I do intend to share more scripts & tips as I re-discover the scripting fun again. So stay tuned for more PowerShell fun!


The following sources have been used to create this post:
Citrix XenServer 6.0 CmdLet Poster
Windows PowerShell Cmdlet Help Topics


Esther Barthel
Solutions Architect at cognition IT

Esther has been working in different roles and functions as an IT consultant ever since she finished her Masters degree in Computer Science in 1997. She has worked as a web developer, database administrator, and server administrator until she discovered how Server-Based Computing ( SBC ) combined servers, desktops, and user experience in one solution. Esther has been specializing in virtualization solutions such as SBC, VDI, application, and server virtualization for over eight years now and is currently working as a Senior Consultant at PepperByte, where she designs and implements Citrix® solutions for both small-business and large-enterprise infrastructures scaling from 100 to 15,000 users.
In january 2014 her first book Citrix XenApp 6.5 Expert Cookbook was published by Packt Publishing.

Esther is awarded as a Citrix Technology Professional (CTP) from 2015 - 2017.
Esther is awarded as a Microsoft Most Valuable Professional (MVP) in 2017.

Esther is a Citrix Certified Expert – Virtualization (CCE-V), Citrix Certified Professional – Mobility (CCP-M), Citrix Certified Professional – Networking (CCP-N) and RES Software Certified Professional (RCP).