In the past I developed a tool, which I named CVAMT, (https://www.silviobalduzzi.com/en/2020/04/cvamt-citrix-virtual-apps-migration-tool-en/) whose goal was to simplify the migration of published applications within Citrix farms. That tool was based on the Citrix POSH package and could only migrate applications from an OnPrem farm to another OnPrem farm or to Citrix Cloud.
Over the past few months Citrix released a new tool in preview (several updated versions have been released since then), called Citrix Auto Config, which is made up of several PowerShell functions designed to migrate all the configurations of an OnPrem farm to a farm in Citrix Cloud; so I decided to evolve CVAMT into something more complete, and that’s how the idea of developing CVADMT was born.

CVADMT is an application developed entirely in PowerShell and based mainly on the features provided by Citrix Auto Config.
On top of that, CVADMT adds checks, logging and the ability to run several imports in parallel, using multi-threading.
At startup, CVADMT checks that the “Citrix Auto Config” package is present and installs a PowerShell module needed to read .yml files.
The configuration phase starts with selecting a temporary folder where the exported .yml files will be saved; two subfolders, “OnPrem” and “Cloud”, will then be created automatically in that location to store the two exports.
CVADMT then prepares two separate configuration files inside the folder you just selected:
– CustomerInfo.yml: where you enter the credentials for accessing the Citrix Cloud tenant;
– OnPremInfo.yml: where you fill in the address of the Delivery Controller of the OnPrem farm;
These files must be filled in with the requested information.
Once the files are filled in, you can select the temporary folder again (using the “Select Path” button) and CVADMT will read the information entered in the two .yml files mentioned above.
When you start the exports, the “OnPrem” and “Cloud” folders will be populated with the .yml files extracted from the two environments; once the export is complete, CVADMT will read the files and set up the interface for launching bulk and/or selective imports of the components.
The CVADMT graphical interface is designed to make it easy to launch the processes that import components from the OnPrem farm into Citrix Cloud;
The CVADMT GUI has a Logging section that shows the activities performed, which are also saved to a file in “C:\Temp\” (the default location for exports).
Besides the time of execution, each log line also states the area it refers to; for example:
[21-12-2020 11:26:12][GUI] Citrix Automated Configuration PowerShell - 1.0.238.17 [21-12-2020 11:26:16][GUI] Module Powershell-Yaml import… [21-12-2020 11:26:17][GUI] Read file OnPremInfo.yml… [21-12-2020 11:26:17][GUI] Read file CustomerInfo.yml [21-12-2020 11:29:58][ONPREM] Farm OnPrem configurations export… [21-12-2020 11:29:58][CLOUD] Farm Cloud configurations export… [21-12-2020 11:30:22][ONPREM] Farm OnPrem configurations export terminated. [21-12-2020 11:31:42][GUI] Exports terminated. [21-12-2020 11:31:42][ONPREM] MachineCatalog.yml import… [21-12-2020 11:31:43][ONPREM] MachineCatalog.yml imported! [21-12-2020 11:31:43][ONPREM] DeliveryGroup.yml import… [21-12-2020 11:31:43][ONPREM] DeliveryGroup.yml imported! [21-12-2020 11:31:43][ONPREM] ApplicationGroup.yml Import [21-12-2020 11:31:43][ONPREM] ApplicationGroup.yml imported! [21-12-2020 11:31:43][ONPREM] Application.yml import… [21-12-2020 11:31:44][ONPREM] Application.yml imported! [21-12-2020 11:31:44][ONPREM] Icon.yml import… [21-12-2020 11:31:47][ONPREM] Icon.yml imported! [21-12-2020 11:31:47][CLOUD] MachineCatalog.yml import… [21-12-2020 11:31:47][CLOUD] MachineCatalog.yml imported! [21-12-2020 11:31:47][CLOUD] DeliveryGroup.yml import… [21-12-2020 11:31:48][CLOUD] DeliveryGroup.yml imported! [21-12-2020 11:31:48][CLOUD] ApplicationGroup.yml import… [21-12-2020 11:31:48][CLOUD] ApplicationGroup.yml imported! [21-12-2020 11:31:48][CLOUD] Application.yml import… [21-12-2020 11:31:48][CLOUD] Application.yml imported! [21-12-2020 11:31:48][CLOUD] Icon.yml import… [21-12-2020 11:31:53][CLOUD] Icon.yml imported!
By switching to the “Migration” Tab, you can select the resources to import into Citrix Cloud. The top section is designed to migrate all the selectable components.
For the selected components, these imports will replicate all the configurations contained in the .yml files (exported from the OnPrem farm) to the farm in Citrix Cloud (where possible).

The middle section of the window, on the other hand, lets you view the resources to be migrated and migrate only the resources you select.

If, for example, we migrated the Delivery Groups from the top section, this would result in a full migration of all the Delivery Groups in the OnPrem farm (along with their configurations/published resources); if instead we wanted to migrate only a few specific Delivery Groups, we could select them one at a time in the middle section and click the “Import Selected Delivery Group” button. CVADMT would start an import thread for each Import activity defined, and would log the start and end of each action performed. At the end of each action, the log file for the action that has just finished opens automatically (a log file generated by the calls made by Citrix Auto Config).
So CVADMT lets you migrate the components in bulk or selectively, and gives you better control over the progress of the import activities.
If you start the application again later, you can reload the previously exported .yml files and carry on with the remaining migration activities, even in later phases. Of course, you can also copy the exports to another machine and carry on with the activities on different machines (for example, when the DDCs have no internet access, etc…).
The last Tab of CVADMT provides a lightweight browser for accessing the Citrix Cloud administration portal:

This browser can be handy as a single access point from which to check that the components migrated with CVADMT were imported correctly.
Among the latest features added in release 2.1.0.22, the one that stands out is the ability to rename the VMs listed in the DeliveryGroup.yml file:

This feature was implemented to meet a need that came up while using CVADMT in a specific case: I had to perform a migration by recreating Machine Catalogs in parallel with the ones running in the OnPrem farm (so as not to cause any disruption to users in production), and the export of the OnPrem farm obviously contained the hostnames of the machines in the original Machine Catalogs. With this feature you can select the machines in the exports and replace them with the hostnames of the newly created machines. When saving, CVADMT backs up the DeliveryGroup.yml file (saving it as DeliveryGroup-BCK) and replaces the VM hostnames in the .yml file.
Future developments:
I’m testing the implementation of PowerShell requests to the Citrix services (via REST API). This feature could be useful for getting the current state of the Cloud environment without running a full backup of the environment every time. I’d like to be able to send live requests to the Cloud environment to get the list of resources and compare it with what you want to migrate (also to check the status of the migrations already performed).
These days I’m putting CVADMT to the test in a customer migration of about thirty Delivery Groups, for a total of more than 1000 VMs. I’m sure more ideas will come to me along the way to improve it even further!
CVADMT
- January 1, 2021UpdateOptimized the installer wizard with prerequisites
- January 1, 2021UpdateOptimized the powershell code
- December 28, 2020AddAdded the Machines renaming function into Delivery Groups
- December 28, 2020FixedBug fixes
- December 28, 2020UpdateOptimized the installer wizard with prerequisites
- December 21, 2020FixedBug fixes and log optimization
- December 21, 2020AddAdded the installer wizard
- December 21, 2020AddFirst public release
