XenApp 6.0 to 6.5 Upgrade Utility


XenApp 6.5 does not provide a binary upgrade path from XenApp 6.0. For some environments, the ability to create a new virtual machine image or clean installation XenApp 6.5 servers might not be possible.

The script performs what normally would be a long process of manually uninstalling XenApp 6.0 components in a select order, then installing XenApp 6.5. The following steps are performed:

  • Checks to see if XenApp 6.0 is installed or not, and if the XenApp 6.5 installer is available.
  • Prompts for a password to silently run the install process after reboot.
    : This is not stored by the script but is stored by the operating system in the Task Scheduler.

  • Uninstalls XenApp 6.0 components. By default these include:
    Citrix EdgeSight for XenApp 6 Agent 5.3 x64
    Citrix XenApp 6.0
    Citrix HDX MediaStream for Flash – Server
    Citrix Common Commands
    Citrix XenApp Commands
    Citrix Group Policy Client-Side Extension (x64)
    Citrix XenApp Server Configuration Tool
    Citrix XenApp Server Role Manager
    Citrix XenApp Management
    Citrix Single Sign-On Console 4.8
    Citrix XenApp Group Policy Management Experience (x64)
    Citrix Single Sign-On Plug-in
    Citrix XenApp Power and Capacity Management Agent
    Citrix Offline Plug-in
    Citrix Online Plug-in
    Smart Auditor Agent
  • Installs XenApp 6.5 and, by default, joins the server to the farm as a worker. This can also be changed by editing the JOIN command parameters as outlined in the document.
  • Verifies the join is successful by checking to see if the IMA service is running.
  • Note: Once the script is complete, all of the discretionary components above need to be manually reinstalled and configured.

IMPORTANT: This script is designed to operate silently in the background without requiring you to log in between reboots. After starting the script it takes 30 minutes (or more) and a few reboots to complete. Instructions for checking the status can be found at the end of this article.



This script cannot be used to migrate a single server xenapp 6.0 farm to xenapp 6.5, it requires that a xenapp 6.5 farm exists and will migrate a xenapp 6.0 server into this pre-existing farm.

By default, the script installs XenApp 6.5 as a worker in the farm. As such, one XenApp 6.5 controller is required. If the script will be used to join workers to multiple zones, then one controller in each zone is required. For more information on workers and controllers, contact your TRM.

User Account Control (UAC) must be turned off for the user executing the script. UAC can be reset after the install is complete.

PowerShell execution policy must be set to Unrestricted and can be reset after the install is complete.

If installing XenApp 6.5 from a network share, at least Read permission from the location.

If you plan on using the script as an unattended install of XenApp 6.5 on a new Windows 2008 R2 machine, ensure that .NET 3.5 is installed prior to running the script or the install will fail.

Installing XenApp 6.5 Worker Upgrade Utility

Download the script and place it on a local directory of the XenApp 6.0 machine.

How to Use XenApp 6.5 Worker Upgrade Utility

Setup Environment and Copy DSN File and Script

  1. Turn UAC off for the current administrator.
  2. Set the PowerShell execution policy to Unrestricted by running PowerShell in administrator mode and executing Set-ExecutionPolicy Unrestricted and entering “Y” when prompted.
  3. Copy the DSN file from the already installed XenApp 6.5 to the server you wish to install XenApp 6.5 in a directory with read/write permissions. You can also copy it to a network share location.
    If the DSN file is from a server where SQL Express is the data store, you must edit the DSN file, navigate to the line SERVER=(local)CITRIX_METAFRAME and change the (local) to the IP address or short name of the server with SQL Express installed.

Edit and Configure Script

  1. Edit the script in Notepad or PowerShell ISE and configure the following parameters:
    Master log file used to record the progress of this script.

    $global:logfile = "$($global:LogFolder)XenAppUpgrade.txt"
    This location should have read/write privileges for the current user executing the script. By default, this is the C:WindowsTemp directory.
    Network location for latest version of XenApp

    Computer and Share information for mapping a share to where the latest XenAppSetupConsole.exe is found. The share must be accessible by the current user account. It can also be a local drive and/or directory.
    $global:SharePathName = \TestPCdvdXenApp Server SetupbinXenAppSetupConsole.exe
    Install XenApp Command Line

    This line sets the install option for installing XenApp and the log location and name for the XenApp install.
    $global:InstallCommandLine = "/install:XenApp /logfile:$($global:LogFolder)XenAppIronCoveInstallLog.txt"
    Install command-line options: http://support.citrix.com/proddocs/topic/xenapp65-install/ps-install-command-line.html

  2. location for legacy Citrix Online-Plugin

    This must be configured because the Online-Plugin has its own installer.
    $global:legacyCitrixReceiverPathName = "C:ProgramDataCitrixCitrix online plug-inTrolleyExpress.exe"
    Local location for Server Config Tool

    $global:ConfigPathName = "c:Program Files (x86)CitrixXenAppServerConfigxenappconfigconsole.exe"
    Configure XenApp Command Line (JOIN)

    This configures the parameters that will be used in conjunction with the “xenappconfigconsole.exe” command to join the server to the XenApp farm.
    Configure command-line options: http://support.citrix.com/proddocs/topic/xenapp65-install/ps-config-command-line.html
  3. To install XenApp 6.5 as a controller, remove the parameter /ImaWorkerMode:True.
    : If you require a space in the zone name, you must use double quotes after the colon and precede each double quote with a tick (`) as it is the PowerShell escape character. (ex. /ZoneName:`”Default Zone`”)
    The following example installs XenApp 6.5 and joins the server into the Default Zone as a worker.
    $global:ConfigCommandLine = "/Executionmode:Join /ImaWorkerMode:True /DsnFile:c:mf20.dsn /AuthenticationType:Windows /OdbcUserName:[domain name]administrator /OdbcPassword:password /LicenseServername:licenseserver.com /LicenseServerPort:27000 /AddAnonymousUsersToRemoteDesktopUserGroup:True /AddUsersGroupToRemoteDesktopUserGroup:True /AddAuthenticatedUsersToRemoteDesktopUserGroup:True /ZoneName:`”Default Zone`”"
  4. Copy the script file to a location on the XenApp 6.0 machine. The script cannot be run from a network share.

Execute the Script

  1. Open PowerShell in Administrator elevation. If not already done, set the PowerShell execution policy to Unrestricted. Change to the directory where the upgrade is located.

    a. To execute the script as the default install as a worker, run the script as:

    b. To execute the script on a blank machine as a fresh install run the script starting at step 2:
    .Upgradexenapp.ps1 2

  1. The script prompts for a password. For the process to automatically continue after reboots, the Task Scheduler needs to launch the PowerShell process using the administrator account, and the operating needs to reconnect to the network shares. The password is not stored in the script but is handled by the operating system and stored in the Task Scheduler.

Monitor Progress

  1. To monitor the progress of the script, choose one of the following:

    a. Log on to the server console and either open Event Viewer and filter by the process MSIEXEC and to see the overall progress. Entries of Information type will show what step has previously passed and the step the script is executing. Entries of an Error type will display what step failed and to examine the log file UpgradeXenApp.txt in the log file directory.

    b. You can also navigate to the log file location and open the file XenAppUpgrade.txt and scroll to the bottom.

  1. When the upgrade process is complete, the message in the event log will state “Citrix XenApp upgrade Step 4: PASS! Citrix XenApp upgrade is complete!”
    Should the upgrade process FAIL for any reason, review the logs and correct the error, then start the script using the step it failed at as a parameter.

    To start at step 4, verifying the install of XenApp 6.5.
    .UpgradeXenapp.ps1 4
  2. Run Discovery from the XenApp 6.5 controller and verify the new server is in the farm. You may also run Get-XAServer from any controller.

Data Modified by XenApp 6.5 Worker Upgrade Utility

The utility completely uninstalls XenApp 6.0 and the selected components, then installs XenApp 6.5.

How to Undo the Changes Made by XenApp 6.5 Worker Upgrade Utility

As noted above, to replace the farm back to XenApp 6.0, restore a virtual machine image or a disk image with XenApp 6.0 installed.

Uninstalling XenApp 6.5 Worker Upgrade Utility

Delete the XenAppUpgrade.ps1 file from the machine when the upgrade is complete.

More Information

The script is completely customizable and can be edited to suit any need.

You might want to use the new XenApp Migration tools to export all of the XenApp 6.0 settings and import them into XenApp 6.5 for an easier transition.


The above mentioned sample code is provided to you as is with no representations, warranties or conditions of any kind. You may use, modify and distribute it at your own risk. CITRIX DISCLAIMS ALL WARRANTIES WHATSOEVER, EXPRESS, IMPLIED, WRITTEN, ORAL OR STATUTORY, INCLUDING WITHOUT LIMITATION WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NONINFRINGEMENT. Without limiting the generality of the foregoing, you acknowledge and agree that (a) the sample code may exhibit errors, design flaws or other problems, possibly resulting in loss of data or damage to property; (b) it may not be possible to make the sample code fully functional; and (c) Citrix may, without notice or liability to you, cease to make available the current version and/or any future versions of the sample code. In no event should the code be used to support of ultra-hazardous activities, including but not limited to life support or blasting activities. NEITHER CITRIX NOR ITS AFFILIATES OR AGENTS WILL BE LIABLE, UNDER BREACH OF CONTRACT OR ANY OTHER THEORY OF LIABILITY, FOR ANY DAMAGES WHATSOEVER ARISING FROM USE OF THE SAMPLE CODE, INCLUDING WITHOUT LIMITATION DIRECT, SPECIAL, INCIDENTAL, PUNITIVE, CONSEQUENTIAL OR OTHER DAMAGES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. Although the copyright in the code belongs to Citrix, any distribution of the code should include only your own standard copyright attribution, and not that of Citrix. You agree to indemnify and defend Citrix against any and all claims arising from your use, modification or distribution of the code.

You can read the original post here at the Citrix knowledgebase.

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.