Category Archives: Administration

Provisioning Server: Exporting vDisk fails


Provisioning Server is one of those workhorse products that works well day in and day out and then it doesn’t. There’s so many things that can go wrong for a number of reasons. This post covers a simple fix for when you can’t export a vDisk.


There is a Mac/PC debate among Citrix engineers on whether MCS (Machine Creation Services) or PVS (Provisioning Services) is better. This post will NOT engage in this debate because clearly, PVS is better :).

One thing that distinguishes PVS from MCS, is vDisk versioning. With vDisk versions you can isolate updates to a vDisk or allow for quick revisions without affecting and copying a 30-40 GB file every time you want to make a change or update to your vDisk. For each version you can (and should) add notes to the Properties field.


One thing we recently decided as a team was to utilize Bugzilla to track changes to our vDisks. Having a method for tracking changes is essential, especially if you have multiple team members and want everyone on the same page. As you can see above, I like to put a lot of info into the properties so that there’s no question as to what changes the vDisk has. This unfortunately caused an issue recently as I was not able to export the vDisk to our other PVS farm.


When working with vDisk versions, exporting the vDisk is the easiest way to move those versions to another farm.


You can select from what version you wish to export the vDisk and an XML file is generated. You then copy the XML and the AHVDX files to the destination PVS Store. From the destination Store, right-click and select “Add vDisk Versions…” and your vDisk versions are added.


Normally, this works well in our environment, but this time I was not able to export the vDisk. I could bring up the export vDisk dialog and go through the motions, but no XML was generated. It turns out if you have multiple lines in the version description field, the export fails. You don’t get any warning message or event log entry about it either so before you start going down the rabbit hole trying to find a fix. Double-check your properties field and make sure you have everything on one line. I hope Citrix resolves this in an upcoming PVS version, as it seems like a minor thing to fix.



Thanks for reading,

PowerShell: Friday Script Blitz 3



Happy 2018!!! In my current position I’m getting to do a lot of PowerShell scripting. Typically these are quick scripts for maintenance or finding information about our Citrix environment. I’m posting several here to share.

NOTE: These scripts were written against a XenApp 7.9/PVS 7.15 environment


If you have to maintain unique personality strings on your provisioned devices, then this script will help. It spits out all the strings in a PVS farm. I wrote this script due to a requirement with Symantec AV that expects to see a unique hardware ID for servers connecting to it. One way to do this in provisioned environments is with a startup script. See How to prepare Symantec Endpoint Protection clients on virtual disks for use with Citrix Provisioning Server for more info.

Get it from GitHub


The companion script for above. This script will set the Personality String for a PVS Device. It can take an input or generate one automatically. It assumes a 32 character hexadecimal string.

Get it from GitHub

Thanks for reading,



Citrix’s software developers are hard at work and have rolled out version 4.5 of Workspace Environment Manager. You can now download the new version here (requires Platinum licenses and login to I’ve provided the release notes below.

What’s new

Workspace Environment Management 4.5 includes the following new features. For information about bug fixes, see Fixed issues.

Application security

Application Security functionality has been added to the administration console Security pane. This allows you to control the applications users are permitted to run by defining rules in Workspace Environment Management. This functionality is similar to Windows AppLocker but gives you the additional ability to:

  • define rules without immediately assigning them,
  • bulk-assign rules to users,
  • import rules from Windows AppLocker.

For more information, see Security.

Workspace Environment Management SDK PowerShell Modules

PowerShell modules are released as the first part of a Workspace Environment Management SDK. The modules are installed by the infrastructure services installation process. You can perform the following administrative tasks by running the cmdlets in the modules directly from the PowerShell console, or from PowerShell scripts:

  • create a Workspace Environment Management database
  • update a Workspace Environment Management database
  • get the configuration from a local or remote infrastructure server
  • set the configuration of a local or remote infrastructure server

For more information, see the Citrix Developer Documentation.

Note: This is the initial release of the PowerShell SDK modules, and Citrix reserve the right to make further syntax improvements in future releases.

Support for SQL Server Always On availability groups

Workspace Environment Management has been tested with SQL Server Always On availability groups, and is now certified for use on that technology. For more information and advice, see System requirements.

Process optimization

History now user-centric. Workspace Environment Management (WEM) intelligent optimization relies on WEM “remembering” how many times a process infringes rules configured in the administration console. Based on this “memory,” WEM optimizes (or not) the process when it is next started.

In previous releases, this “memory” was based only on process name. In other words, if a process infringed a rule when it was running as User A, it was also considered to be infringing for all users connecting to the agent, and the process was optimized globally for all users.

Starting in this release, the intelligent optimization “memory” is based on both process name and user details. This means that intelligent optimization is now user-centric. In other words, if a process infringes a rule when it was running as User A, but does not infringe a rule when it was running as User B, the process is optimized only when running as User A.

History now in local database. Workspace Environment Management (WEM) has two local databases: one contains the agent local cache, and another stores local data. Historically, WEM’s intelligent optimization memory was stored either in the agent registry or in an XML file. An XML file was used if the custom argument UseNonPersistentCompliantHistory was set during agent installation.

From this release, WEM’s intelligent optimization memory is stored in the agent local database (LocalAgentDatabase) located in the agent installation folder.

AgentServiceUseNonPersistentCompliantHistory custom argument for agent installation

The Citrix Workspace Environment Management Agent Setup executable no longer acknowledges the AgentServiceUseNonPersistentCompliantHistorycustom argument. This custom argument previously allowed you to save agent service process optimization history to an XML file. The optimization history is now stored in the agent local database (LocalAgentDatabase) located in the agent installation folder.

User interface

The following changes are made to the administration console user interface:

  • A new Application Security pane is added to the Security tab.


Workspace Environment Management documentation is updated to reflect current product behavior.

Workspace Environment Management SDK documentation is added to the Citrix Developer Documentation.


Thanks for reading,