SyncFiles Utility

I actually wrote this utility a few months ago, but it was very useful for the customer I developed it for so I wanted to share it.   This utility was developed because a customer of mine was looking at going to VDI, but they application they used wrote configuration data into locations outside of the user profile which would be replicated with a tool like VMware Persona Management.   It can be used to sync files both on logon and logoff.  It also logs all activity for troubleshooting.   This utility can be very useful anytime files not located in the user profile need to be synced or even if only specific files in user profile need to be synced.  It will work with any VDI or Published Application solution.


The application was developed in .NET 2013 and is a very simple console application.   The configuration for the utility is within the .NET configuration XML file.  Both the .exe and the config file need to be kept together and can be called from any logon script to run when the user logs into the VDI or Published App session.


  1. Create a shared CIFS folder where the synced data will be stored on logoff and then pulled from on logon.  Make sure the user has permission to create folders and files in this directory.  The application will create a folder based on the username of the user executing the utility.
    Screen Shot 2015-01-06 at 9.35.33 AM
  2. Create a shared CIFS folder (can be the same one you created earlier), for the log files to be placed if you choose to enable logging.  Same as before, the user executing the sync needs to be able to write into this directory to be able to create the log file and update it.
    Screen Shot 2015-01-06 at 9.49.25 AM
  3. The application requires the Microsoft .NET framework 3.0 be present on the systems where it will run.


All configuration is done within the XML configuration file “SyncFiles.exe.config” This file can be modified in any standard text editor, including notepad.

  1. Configure location to sync files to and from.   This should be a standard CIFS file share.  Enter the share UNC in the “Sharepath” configuration section inside the value key.


  2. Configure files to sync.   Many files can be configured for sync, the file paths need to be separated by a pipe “|”.  The full path to the local file that needs to be synced should be specified in the configuration file.
  3. Configure log file path.   Enter the path to the CIFS file share you created earlier where the logon and logoff logging will be captured.  Note:  This is dependent on the EnableLogging value being set to True.  If you don’t want to enable logging you can skip configuring this value.
  4. Configure Logging.  If set to True, logging events will be captured for Logon and Logoff events.  The log file is stored in the following format Username_action. Example:  Chris_Logoff.txt
  5. Set direction of file copy.   This utility can be used for both logon and logoff events.  On a logon event, the specified files will be copied from the network share location to the local computer.  On a logoff event, the specified files will be copied from the local computer to the network share.

    To configure for a Logon set the IsLogon value to True:

    To configure for a Logoff set the IsLogon value to False:

  6. Set ForceCopy value.   If set to true the utility will always overwrite the files on either a logon on logoff event.  If set to False the utility will examine file timestamps to overwrite only newer files.


Using the Utility:

Once you have the utility configured you can execute the file by running SyncFiles.exe to test the results.  You need to keep the SyncFiles.exe and the SyncFiles.exe.config file in the same directory.  You can call the utility using an existing logon script or you can set the file directly as a logon script as shown below.


The files will be copied to the designated user folder with the full file path in the file name on the network share as shown below:

Screen Shot 2015-01-06 at 11.12.42 AM

Please let me know of any suggestions, comments or issues.  I can be reached on Twitter at @chrisdhalstead

You can download the SyncFiles Utility Here:

Posted in Horizon View Utilities | Tagged , | Leave a comment

VMware App Volumes Event Notifier – Updated

Updated 1/6/15:

Based on feedback I made the following updates to the App Volumes Event Notifier:

  • Added Windows Authentication as a option when connecting to the App Volumes SQLDB
    • When adding or updating a DB you select either “Windows Authentication” or “SQL Authentication” for the connection.
    • Please use domain\username syntax for Windows Authentication connections

Screen Shot 2015-01-06 at 2.39.50 PM

  • Added a check to see if an instance of the application is already running.

Screen Shot 2015-01-06 at 3.10.54 PM

The updated version of the application can be downloaded here:

Keep the ideas and suggestions coming.   Thanks!

I have been running App Volumes for several weeks now in my home lab and working through a lot of Customer Demos where I am building up and tearing down my App Volumes environment very quickly.   I had some times where volumes didn’t mount properly and I had to keep going back to the System Messages section of the App Volumes web interface.

Screen Shot 2014-12-23 at 10.30.53 AM

To help with getting more real-time alerting on App Volumes system messages I wrote the App Volumes Event Notifier which is very similar to the Horizon View Event Notifier Fling I wrote (

This version is a Beta and doesn’t have many features yet.   I will add filtering and ability to send messages in batch in a upcoming release.  I wanted to get it out there so others can use and test.


  • System running .NET 3.5
  • SQL account with access to App Volumes DB


  • Place App_Volumes_Event_Notifier.exe and the associated XML configuration file in the same directory.
  • Launch the .exe and navigate to settings

Database Settings

  • Click “Add DB Server”
    • Enter a Friendly Name – in Name
    • Enter the SQL server and instance in DB Server (ex:  server\instance)
  • Enter the DB name in the database field.  NOTE: The default DB name for App Volumes is svmanager_production
    • Enter the SQL username and PW with access to the App Volumes DB
    • Click Save Changes – you can also test connection to the DB at this time.
    • You can add additional App Volumes DBs to monitor at this time by following the same process

Screen Shot 2014-12-23 at 10.04.06 AM

Events Settings:

  • There aren’t event types in App Volumes so you don’t need to set anything here
  • You can set how many minutes to query in the system messages table
  • Click Save Changes

SMTP Settings:

  • Enter SMTP server address
  • Enter port if not 25
  • Enter who to have alerts sent from
  • Enter list of users who will receive the alerts (comma separated)
  • You can send a test message
  • Select if you would like alerts sent via email or not
  • Click Save Changes

Running the Application:

  • Click “Start” then select the “App Volumes Events” tab to see any current events.
  • Click the X at the top right of the form to minimize to the system tray
  • The App Volumes Notifier Icon Looks like this:  Screen Shot 2014-12-23 at 12.16.03 PM
  • The tray icon can be right-clicked or double-clicked to bring the form back up

Stopping and Exiting the Application:

  • Click “Stop” to stop processing Events
  • Select File | Exit to close the application completely.

Screen Shot 2014-12-23 at 12.10.16 PM

Screen Shot 2014-12-23 at 10.05.06 AM

Screen Shot 2014-12-23 at 10.05.18 AM

The application can be downloaded here:

This is a very basic version, and I would appreciate feedback on issues or suggestions.   You can send them to me via email: or on Twitter: @chrisdhalstead


Posted in App Volumes | 3 Comments

Install / Configure VMware Horizon FLEX

In this article I will walk through the process of installing and configuring VMware Horizon FLEX.   Horizon FLEX provides policy-based management of encrypted, containerized Virtual Machines which run on a Type 2 Hypervisor such as VMware Player Pro or VMware Fusion Pro.   The primary use cases of Horizon FLEX are the disconnected road-warrior, contractors and BYO users.   It allows corporate customers to provide encrypted, managed corporate desktops to whatever desktop the end-user has and to set expiration or lock out the VM via Policy.  Mirage can be used to manage the FLEX machines for Disaster Recovery, software distribution, backup and patching.  This article will be modified as I learn more about the product and as the product is updated.


Horizon FLEX is built on top of VMware Mirage 5.2, so the first step is to install Mirage 5.2.   We will first go through the process of doing a basic installation of Mirage.

I am creating this entire environment on two Virtual Machines running on top of VMware Fusion.  In order to get proper name resolution which is required for FLEX I am using a custom entry in the local hosts file on my mac.

Screen Shot 2014-12-22 at 5.36.37 PM


Certificates are critical to a FLEX installation and a CA issued or Third-Party certificate should be used.   The certificate chain (cert + CA cert) need to be installed and trusted on the client systems which are running Fusion or Player Pro as well.   This is only needed if you are using a certificate from a CA that is internal and not a generally trusted certificate like one from GoDaddy, Entrust, Etc.  

Request a certificate from a Microsoft CA

In this example I will be using a 2008R2 Domain Controller with the Active Directory Certificate Services role enabled in the Demo Domain.

Screen Shot 2014-12-22 at 5.25.56 PM

Create and use a Microsoft CA generated cert with FLEX

On the FLEX Server start the Certificates MMC snap-in and select “Local Computer”

  • Navigate to “Personal” | “Certificates”
  • Right-Click the Certificates folder and choose “Request new Certificate”
  • Select “Active Directory Enrollment Policy”
  • Choose “Web Server” – and Enter the Following at a minimum:
    • Common Name – FQDN of the Server
    • Alternative Name –
      • DNS – FQDN of the Server, IP Address if using local hosts file
      • IP Address
    • Private Key – Make the Private Key exportable

Screen Shot 2014-12-22 at 5.46.29 PM

Screen Shot 2014-12-22 at 5.48.59 PM

Screen Shot 2014-12-22 at 5.48.49 PM

  • Hit Enroll to generate the certificate.
  • Verify the certificate is installed and has the proper settings

Export Certificates

You will need to export the Certificate from the CA and from the FLEX Server.  These should be placed in a location accessible by the clients you will use to connect to the FLEX server from.  They need to be trusted on those endpoints in order to connect and pull policies properly from a FLEX Server.  If you don’t have the full certificate chain installed and trusted on the endpoint, you will receive an error that the VM can’t contact the policy server.

Export the Certificate from the Certification Authority

Screen Shot 2014-12-22 at 11.24.18 AM

Export FLEX server certificate

Screen Shot 2014-12-22 at 6.14.37 PM

Place them in a location you can get to from the client systems.

Trusting Certificates in Fusion:

Copy the certs to your Mac system and double-click them to open them in Keychain Access.  The certificates should be in the login section of Keychain Access.

  • Open the FLEX server certificate and expand Trust.  Select “Always Trust” for SSL.
    • Save the Changes
  • Open the Root CA certificate and expand Trust.  Select “Always Trust” and save changes.

Copy both of the Certificates to “System” Folder to make sure they are trusted by all users and local system processes such as the .VMX processes in Fusion

Screen Shot 2014-12-22 at 5.31.39 PM

Screen Shot 2014-12-22 at 5.32.23 PM

Screen Shot 2014-12-22 at 5.32.43 PM

Screen Shot 2014-12-22 at 5.33.12 PM

Trusting Certificates in Windows for Player Pro:

We need to install the FLEX certificate and the Root CA certificate into the Windows system which will run VMware Player Pro and host the FLEX VMs.  Copy the certificates to the Windows system.

  • Open the Certificates MMC snapin – first as Current user
    • Import the FLEX server certificate into Personal | Certificates
    • Import the Root CA certificate into Trusted Root Certification Authorities | Certificates
      • This may already be there if the client is a member of the same AD Domain
    • Open the Certificates MMC snapin – as Local Computer
      • Import the FLEX server certificate into Personal | Certificates
      • Import the Root CA certificate into Trusted Root Certification Authorities | Certificates
      • This may already be there if the client is a member of the same AD Domain

Screen Shot 2014-12-22 at 6.43.09 PM


Install VMware Mirage 5.2 Management Server:

Before installing the Mirage 5.2 Management server, make sure you have a SQL server setup with appropriate permissions to create the Mirage database.   Mirage also requires that the .NET 3.5.1 Framework feature is installed on the server.

  • Make sure the .NET 3.5.1 Framework feature is enabled on the server.
  • Open a command prompt as Administrator
  • Browse to the director containing the Mirage installation.
  • Execute (or latest build)
  • Enter the SQL server name and instance where the Mirage DB will be located.   You can also choose a new storage area where Mirage client data will be located.Screen Shot 2014-12-21 at 2.20.21 PM
  • Select the account to run the Mirage Management Server as.   For production environments, it is recommended to use a Domain account.

Screen Shot 2014-12-21 at 2.21.36 PM

Walk through the remainder of the installation process and leave the Administrator console open.

Install Mirage 5.2 Server:

The Mirage server is a stateless system that does the processing and should be scaled out horizontally in a production environment.   There should be a minimum of two Mirage servers in any production environment which are load balanced.

  • Execute mirage.server.x64.21788.exe or latest build
  • Enter the SQL server name and instance that was used to install the Mirage management server.   A custom path can also be entered for the Local Cache.  This is the deduplication store and will benefit from fast storage such as SSD.

Screen Shot 2014-12-21 at 2.35.23 PM

  • Choose to use SSL or not for the Mirage server transport.   It is highly recommended to use SSL and it is a requirement if you want to use the Mirage Gateway feature for external access from a Mirage management perspective. NOTE:  The Mirage Gateway will only handle Mirage (tcp 8000) traffic.  It will not handle FLEX traffic (tcp 7443).  That traffic will need to be port forwarded or managed via a reverse HTTPs proxy to allow external connectivity.  You can use the self-signed certificate that Mirage creates or a third-party or internally generated certificate here.

Screen Shot 2014-12-21 at 2.40.36 PM
Screen Shot 2014-12-21 at 2.43.16 PM

  • Select the system to run the Mirage server service as.  This should be a domain account if you will have more than one Mirage server as they need to be able to access the same storage locations.   This is particularly important if using storage such as CIFS.
  • Finish the installation wizard and choose NO when asked to reboot.
  • Run from the administrator console – this will install the MMC based Mirage Management Console.
  • Reboot.

Test Connection to the Mirage Server

We will now test basic connectivity to the Mirage server before installing the Mirage/Flex components.

  • Open the Mirage Management Console on the desktop

Screen Shot 2014-12-21 at 3.21.55 PM

  • Right-Click VMware Mirage and choose “Connect to Server on localhost”.  Verify successful connection.

Screen Shot 2014-12-21 at 2.49.21 PM

Screen Shot 2014-12-21 at 2.51.21 PM

Install Mirage Web Management Components:

We will now install the Mirage Web Management Components.   This is where the FLEX admin console is located.  There are some requisites we need to verify before intallation.

  • Make sure .NET 4.0 is installed on the server
  • The IIS role must be installed on the server and configured per this excerpt from the Mirage Admin Guide.

Screen Shot 2014-12-21 at 3.27.56 PM

  • Open a command prompt as Administrator and browse to the location where the Mirage installation files are located and execute:mirage.WebManagement.x64.21788.exe in the Web Management folder.
  • Select the location of the Mirage Management server and the ports.  Leave the defaults ports if possible.

Screen Shot 2014-12-21 at 3.33.31 PM

  • Walk through remainder of the wizard and click “Finish” when it is complete.

Create a Folder for Image Downloads

This is the folder where the image files created in FLEX will be download from to the remote clients.  This can be on any web server.  It does not have to reside on the FLEX server.   The only thing to keep in mind is that the file must be able to be downloaded directly without any authentication challenge as FLEX is expecting this.   For this article, I will create the download folder on my FLEX server.

  • Create a folder and assign permissions for users to be able to download the FLEX images.   In my environment I gave the ISR account read access.    Whatever account only needs read only access to the folder at the NTFS level.

Screen Shot 2014-12-21 at 4.04.02 PM

  • Optional – I like to share this directory out to an Administrative Group to make the import process easier.

Screen Shot 2014-12-21 at 5.10.12 PM

Create a Virtual Directory in IIS to allow the FLEX images to be downloaded.

  •  Open the IIS administrator and browse to “VMware Mirage Management Web Site” then click on “rvm”
  • Right-click rvm and choose “Add Virtual Directory”
    • Set an Alias (remember this)
    • Browse to the directory you created earlier for the FLEX images.
    • Click OK

Screen Shot 2014-12-21 at 4.08.38 PM

  • Set the “VMware Mirage Management Web Site” to use the Certificate identified earlier.  This should have been placed in Personal | Certificates.
    • DO NOT use the self-signed certificate that Mirage installs.   It does not have a fully qualified host name in the Subject Alternative Name file and will NOT work with FLEX
    • Select the VMware Mirage Management Web Site and then click “Edit Bindings” on the Right Column.

Screen Shot 2014-12-21 at 11.07.54 PM


Test FLEX Admin Console Connection

You may have to confirm a security exception if using a self-signed certificate.

You will see a page like the one below.  Log in with a domain account that has access to Mirage.

Screen Shot 2014-12-21 at 3.42.11 PM Screen Shot 2014-12-21 at 3.42.31 PM

Now that we have verified basic configuration and connectivity we will configure the FLEX components.

Create FLEX Image: 

We will now create the FLEX image that we want our users to download and that we will manage through policy.   This process needs to be done on VMware Workstation 11 or VMware Fusion 7.x with a FLEX license installed.  The FLEX license is very important because without it you will not be able to set the policy type to “Managed” which is a requirement.  I will be using VMware Fusion in this article.  It should look like this from a versioning perspective.

Screen Shot 2014-12-21 at 4.21.47 PM

Create a new Virtual Machine and Configure it for FLEX

  • Create a new virtual machine using the Easy Install process if preferred.

Screen Shot 2014-12-21 at 4.24.08 PM

  • Customize the Virtual Machine as needed and start the install process.   Wait for the install process to complete.

Screen Shot 2014-12-21 at 4.28.04 PM

  • When the OS install and VMware Tools install process is complete, shut the Virtual Machine down.  We will apply encryption next.
  • Go to Virtual Machine settings and choose “Encryption and Restrictions”

Screen Shot 2014-12-21 at 4.37.21 PM

  • Check “Enable Encryption” – You will be prompted for your username and PW and then the encryption process will start.  Wait for this process to complete.  Remember the password you used to encrypt this VM.  Your users will need this password to use the FLEX VM!
    Screen Shot 2014-12-21 at 4.42.29 PM
  • Select “Enable Restrictions” – You will be prompted for a password to be used to manage restrictions on this VM.  Do not lose this password or you will be unable to change restrictions settings for this VM!

Screen Shot 2014-12-21 at 4.43.43 PM

  • Click the “Configure” button

Screen Shot 2014-12-21 at 4.45.33 PM

  • Select “Managed” in the “Restrictions Type” drop-down:
  • Enter the path to your FLEX Server (Example:  https://flexserver.demo.local:7443)
    • Do NOT add  /rvm at the end of the URL
    • Click “Check Server” then Save
    • Optionally, you can import certificates that will be the only certs trusted for the VM.

Screen Shot 2014-12-21 at 4.47.57 PM

  • Power the VM back on and configure it with any applications you want the user to have.   You can also configure a Mirage client at this time so the system will be protected and you can deploy applications to the VM.  This would also be the time to add this system to the Domain if wanted.

Screen Shot 2014-12-21 at 4.57.27 PM


Screen Shot 2014-12-21 at 5.06.49 PM

  • If you want the FLEX images to join your Domain, you need to prepare them, by installing a VMware RVM service.
    • Open a command prompt as Administrator
    • Browse to the VMware Tools Directory
    • Run rvmSetup.exe -I
    • Verify that the VMware RVM Setup Service is installed.
    • Install any additional required software and shut down the VM

Screen Shot 2014-12-21 at 4.59.51 PM

Import the FLEX image into your FLEX Server:

  • When the VM is shut down, navigate to the Virtual Machine and from Fusion select File | Export to Tar

Screen Shot 2014-12-21 at 5.07.59 PM

  • If you shared out the Downloads directly export it directly there, if not copy it somewhere you can get to from the Mirage Server.  You want to put this .tar file in the Downloads folder you created earlier on the Mirage Server. Tip: Make sure to remove any spaces in the name of the .tar file.  This will make it easier to connect to the URL (example: win7x64flex.tar).
  • Wait for the export and make sure the .tar file is located in the Downloads folder you created earlier.
  • You also need the .vmx file of the Virtual Machine on the Mirage Server.  We will copy that now.
  • If using Fusion, find the Virtual Machine package file and right-click it and choose “Show Package Contents”.  If using Workstation, just open the VM folder and copy out the .vmx file.
    • find the .vmx file and copy it to the Mirage Server.  It shouldn’t be in the downloads folder.  It just needs to be in a location accessible from the Mirage server when you create an image in the FLEX admin console.

Screen Shot 2014-12-21 at 5.19.03 PM

Import Image into FLEX Server:

  • On the Mirage Server, connect to https://servername:7443/rvm
  • Log in and select “Images”
    • Click the “New” Button
    • Provide the following information
      • Image Name:  Friendly Name for this Image
      • Image URL:  Fully Qualified Path to the Image File.  This is the location where you placed the .tar file.  (Example:  https://flexserver.demo.local:7443/rvm/flexdownloads/win7x64flex.tar)
      • Description:  Optional Description of this Image
      • Select Image File:  This is the .vmx file that you exported earlier.  Select browse and select the appropriate .vmx file for this image
      • Icon: Optional Icon for this Image
      • Image EULA:  Optional EULA to be shown when the user uses the image
      • Click OK when all settings are entered.  This will save the image file.

Screen Shot 2014-12-21 at 5.38.47 PM

  • Verify the download URL
    • Open a web browser and paste in the URL path you entered under Image URL
      • Example: https://flexserver.demo.local:7443/rvm/flexdownloads/win7x64flex.tar
        • If you get a permissions error, the NTFS permissions need to be adjusted.  It should ask you to save the file.

Create a Policy:

The FLEX policies control what the default settings are for FLEX managed virtual machines that are controlled by that policy.   Settings include:

  • Expiration Date of the Virtual Machine – The machine can no longer be powered on after that date if the date is not adjusted
  • If USB Devices Can be passed through to the VM
  • If the user can copy/paste data to or from the VM
  • If the user can drag/drop data to or from the VM
  • Messages displayed to users when the machine expires or is getting close to expiring
  • Flex Server URL and how often the client will poll the FLEX server
  • Offline Time limit – how long the VM can be offline with no contact with the FLEX server before it will become locked.

Select the Policies Tab and adjust setting as wanted and click OK

Screen Shot 2014-12-21 at 5.52.40 PM

Create Entitlement:

An Entitlement is the combination of an Image, a Policy set and a user or group of AD users who are entitled to download and execute the VM.

  • Click the Entitlements tab, then click New
  • Enter an Entitlement Name, select an Image and click Next
  • Type an AD user or group and click add
    • this is a little touchy – type part of the user or group name and it will autocomplete
    • Note: it may take a few minutes for newly created accounts to show up.
  • Click Next

Screen Shot 2014-12-21 at 6.00.03 PM

  •  Select the Policy and then click Next

Screen Shot 2014-12-21 at 6.01.16 PM

  • Enter machine patten and domain information if you want these systems to be renamed and added to your domain.

Screen Shot 2014-12-21 at 6.01.56 PM

  • Click next then Finish – Congratulations – You have created a FLEX Image!

Download the FLEX Image from a Client

To download a FLEX managed image, you need either VMware player Pro or Fusion Pro with a FLEX license attached.   To download the image do the following

  • Player Pro with FLEX.
    • Select the “Connect To Server” icon Screen Shot 2014-12-21 at 6.15.03 PM
    • Enter the path to the server
      • Example:  flexserver.demo.local:7443
    • Enter domain credentials for account entitled to the image
      • domain\user
      • Password
    • You may get a certificate warning if you used a self-signed certificate
      • Click “Continue Anyway”

Screen Shot 2014-12-21 at 6.11.46 PM

  • The image(s) the user is entitled to will show up.   The user can now choose to download the image
    • The user will select a folder to place the Virtual Machine in.
    • Monitor the download process.

Screen Shot 2014-12-21 at 6.16.15 PM

Screen Shot 2014-12-21 at 6.27.48 PM

  •  The download can also be monitored from the FLEX admin console at https://flexserver:7443/rvm
    • Select the “Virtual Machines” tab to monitor the download from the server side.

Screen Shot 2014-12-21 at 6.49.08 PM


  •  Once the FLEX VM finishes downloading and extracting you will be prompted for the password the VM was encrypted with to unlock it.

Screen Shot 2014-12-21 at 10.44.10 PM

At this point the VM can be powered on and used by the user.

 VMware Fusion Pro with FLEX

  •  Go to File | Connect to Server or Apple – K
  • Enter the path to the server and the username and password of the Domain user entitled to the image.
  • Example:  flexserver.demo.local:7443
  • Enter domain credentials for account entitled to the image
    • domain\user
    • Password
    • You may get a certificate warning if you used a self-signed certificate.Screen Shot 2014-12-21 at 6.41.21 PM

Select the image and click the “download” icon

Screen Shot 2014-12-21 at 6.47.50 PM
Screen Shot 2014-12-21 at 6.48.12 PM

  •  Once the FLEX VM finishes downloading and extracting you will be prompted for the password the VM was encrypted with to unlock it.
  • Power the machine on and change the restrictions password if prompted.

Screen Shot 2014-12-21 at 10.52.21 PM


Notice my FLEX machine used the naming convention specified in the entitlement and that it also joined the Demo Domain.

NOTE: If you have connectivity or certificate issues you may see the message below.  Double-check the certificates are trusted and also that you have the proper path to the restrictions management server (https://server-fqdn:7433)

Screen Shot 2014-12-23 at 8.47.08 AM

Managing Policies on FLEX deployed Virtual Machines: 

Once you have connect a FLEX VM to the policy server you can connect to https://flexserver:7443/rvm and adjust policy on the individual VM’s

The following can be adjusted on a per-vm basis


  • Expiration Date – Date when the machine will no longer be accessible by the user.  It will no longer start up after this date.  The administrator can re-enable the VM by extending the expiration date.
  • Lockout – Lock the VM by revoking access and prevent the user from starting it up.   This can be useful for situations where you need to quickly prevent the user from accessing the system at all.
  • Reactivate – Unlock a VM that is currently locked.
  • USB – Allow or Prevent USB devices from being connected to the FLEX VM
  • Copy/Paste – Allow / Prevent copy and past to/from the FLEX VM
  • Drag / Drop – Allow / Prevent users from dragging and dropping files in / out of the FLEX VM.
    • NOTE:  both copy/paste and drag/drop polices require a system reboot to change the setting
  • Require the user to change the power on passphrase when moving or copying the virtual machine. – When the machine is initially copied down and any time it is moved to another storage location the user must set a new restrictions password


  • Message to display when the Virtual Machine Expires
  • Message to display when the Virtual Machine is nearing Expiration

Server Settings:

  • FLEX Server URL:  This should always be https://flexserverfqdn:7443
  • Server Contact Frequency: How often will the client poll the policy server for changes. (minimum setting is 5 minutes)
  • Offline Time Limit: How long can the Virtual Machine go without contacting the policy server before it becomes locked

Screen Shot 2014-12-22 at 6.46.38 PM

Screen Shot 2014-12-22 at 6.48.02 PM

Screen Shot 2014-12-22 at 6.34.44 PM

Screen Shot 2014-12-22 at 11.16.47 AM

Hopefully this article was helpful in assisting the installation and configuration of FLEX. Please let me know if you have an questions or notice any errors in this article.

I can be reached on twitter at @chrisdhalstead


Posted in Horizon FLEX | Tagged , | 13 Comments

VMware Horizon View AutoConnection Utility – UPDATE

 Updated Version 1.0:

Screen Shot 2014-12-19 at 4.54.42 PM

I have released a version 1.0 of the AutoConnection Utility with the following updates / fixes:


  • Disable Shade
    • Ability to enable / disable the “shade” for View Sessions by checking the “Disable Shade” option. This is the menu bar (shade) at the top of the Horizon Client.   This prevents the user from resizing or exiting out of the desktop back to the client desktop.  This option is only available for fullscreen or multimonitor desktop layouts.  This option will be disabled for any other choice.Screen Shot 2014-12-19 at 3.33.33 PM
  • Full 64-bit View Client Support
    • Support for View 3.x clients both 32 and 64 bit
  • Quit Application When Session Ends
    • Ability to quit the View AutoConnection Utility automatically when the View Desktop Session ends.  This can be useful for for thin clients so the session will automatically log off.
  • Use Custom Command String
    • Will allow the user to specify a custom command string after the vmware-view.exe executable.  By clicking the “Refresh” button, the current command string will be built which can then be modified.  When this option is enabled, the application will execute the custom command string specified in the text box.
  • Hide View Client After Launch
    • This is a new feature, only supported in 3.1 and later clients.   It will hide the View Client and application selector window after launching a remote session.   This option will not be enabled for clients earlier than 3.1.
  • Prevent more than one copy of the app from running
    • The application now checks to see if another copy of the AutoConnection Utility is running and it will prevent the application from launching if it detects another copy running.
      Screen Shot 2014-12-19 at 4.48.30 PM
  • Fixes:
  • If a pool had a space in the name, it would not launch and user would get an entitlement error.  oops.
  • Fixed threading issue so the app can launch several desktops without reloading
  • Fixed issue with 64-bit View Clients

Everything else is the same as far as configuration and operation as detailed below.

The new version can be downloaded here:


I had a few customers recently who are looking to repurpose old Windows based systems as thin clients for connecting to VMware View virtual desktops.   They asked if there was a way to directly connect into the users virtual desktop on system startup.   There are certainly ways to do it via command line or URI, but I wanted to come up with a easy, consistent way to do it.    I decided to write an app in .NET that is essentially a wrapper for the View Client.  It creates the command line variables based on what the user configures in the GUI and automatically connects to the specified desktop or application pool.  All of the user configured information is stored in the registry under the current user hive.

The application silently and automatically connects into either a desktop or application pool each time a user logs in by placing it in the startup folder.

Let’s take a look at how to use the application.


  • Windows OS
  • .NET Framework 4.0
  • VMware View Client Installed (32 or 64 bit)

The application is delivered as a single .exe written in Visual Basic .NET 2013.   The application is called View_AutoConnect.exe.   The application requires the VMware View Client be installed to function.  If the client is not detected, the user will receive the following message:

Screen Shot 2014-09-14 at 10.19.22 AM

The URL to download the latest VMware View Client is provided in the error message.   Once they have the client installed they will be able to configure the application.

The first time you launch the application you will need to specify the connection configuration data.  The data is saved to the registry in the current user hive and is dynamically saved as it is entered.

Screen Shot 2014-09-14 at 10.23.19 AM


Mandatory Settings:

  • Select either a Desktop Pool or Application Pool (View 6.x and Later Only) type
    • Traditional Virtual Desktop
    • Seamless Published Application (View 6.x and later)
  • Enter the Name of the Desktop or Application Pool
  • Select the Protocol Type
    • PCOIP
    • RDP
  • Enter the IP or Name of the View Connection Server
  • Select to either log in as the current user or enter credentials
  • Select the desktop layout type
    • Full Screen
    • Multi Monitor
    • Large Window
    • Small Window

Optional Settings:

  • Connect USB devices into the desktop session automatically on desktop startup
  • Connect newly inserted USB devices automatically into the desktop session
  • Launch the View Session Silently
    • NOTE: This suppresses all errors from the View Client directly, but the application will capture any exit codes and present them in a message box (see below)

Testing the Connection

Once you have configured all of the required fields you can test the connection by clicking the “Test Connection Button”

Screen Shot 2014-09-14 at 10.25.50 AM

If any of the mandatory fields are not filled out, you will receive the following error message – this message will appear any time the app is attempting to make a connection if any data is missing.

Screen Shot 2014-09-14 at 10.28.01 AM

Once this information is corrected you can test the connection to the specified pool.

Screen Shot 2014-09-14 at 10.38.44 AM

NOTE:  If the connection server is not a trusted connection and the certificate checking mode is set to warn or never connect to an untrusted server and you are running in silent mode you will get the following error:

Screen Shot 2014-09-14 at 10.50.43 AM

The certificate checking mode is set either on the View Client directly or through Group Policy.

Running the Application

Once you have tested your connection, you are ready to enable AutoConnection.  You enable AutoConnection by checking the “Enable AutoConnection” box.   A common use case would be to place the .exe in the Windows startup folder so that every time a user logs in it will automatically connect to the Virtual Desktop.

Screen Shot 2014-09-14 at 10.53.32 AM

This will run the application with the GUI hidden and will automatically connect to the specified pool.   The application will minimize to the system tray and a balloon will indicate the connection process is occurring.

Screen Shot 2014-09-14 at 10.55.55 AM

At this time the View Session will be connected based on the user specified information.

If there are any errors encountered while running silently, the application will capture any exit codes from the View Client and present them to the user as shown below:

Screen Shot 2014-09-14 at 11.01.51 AM

Updating the Application

If you need to make changes to the application when it is running in AutoConnect mode you need to find the tray icon and either right-click it and choose “Update Settings” or Double-Click it.

Tray Icon:

Screen Shot 2014-09-14 at 11.03.12 AM


This will bring the form back up so changes can be made.

Exiting the Application 

The close box on the form minimizes the application to the system tray and does not close it.  It will continue to run in the system tray until it is manually ended.   To end the application either choose File | Exit from the menu bar or Exit by right-clicking on the tray icon.  You will receive the following notice before ending the application.

Screen Shot 2014-09-14 at 11.08.58 AM

Hopefully this application will be useful for some other people out there.   I would appreciate feedback on errors or suggestions for improvement.  Please add comments to this post and I will get back to you as soon as I can.

Here is the download link:


Posted in Horizon View, Horizon View Utilities | 6 Comments

Raspberry Pi as a Horizon View Client

How to use a Raspberry Pi as an endpoint for VMware Horizon View using View Open Client and Chromium for Blast / Workspace Access.

Blog post in progress….

Raspberry Pi as Horizon View Client

Raspberry Pi as Horizon View Client

Raspberry Pi Blast

Raspberry Pi Blast


Posted in Horizon View Utilities | Tagged , | Leave a comment

Horizon Mirage Settings Utility

In my new role I have been doing a lot of Horizon Mirage demonstrations.   Mirage is designed to run in the background and not affect end-user performance.   This is great for end-users,  while administrators are deploying base layer updates,  etc. – but it makes it difficult when trying to demonstrate the product quickly.   In digging through the Mirage .xml configuration files, I found the settings that enable the client-side throttling.

To enable me to better demonstrate things such as base layer updates, XP to Windows 7 migrations or simply centralizations, I wanted to be able to speed up the process.   I wrote an application in to accomplish this.   The application allows you to enable or disable the client side throttling and essentially allow the application to run at full speed.   It also allows changing the Mirage Server, which is something I do often in lab and for demonstrations.

A screenshot of the application is below – please reach out to me via twitter (@chrisdhalstead) if you are interested, and I will share the application with you.    I am also very interested in any additional ideas for configuration parameters that can be added – so please reach out!

Mirage Update Utility

Mirage Update Utility

Posted in Horizon View Utilities | Tagged | Leave a comment

Horizon View Events Notifier

*Note:  The direct download and version information is available below

There were some questions on my team regarding how to send emails based on events generated in the Horizon View EventsDB.  The Horizon View Events Database was first introduced with Horizon View 4.5.   There is a great article by Dwayne Lessner on doing this using SQL and PowerShell (  I decided to write something in that would allow this alerting external to the SQL database.

I wrote the application in and used the standard SQL client and Mail references.   The application has a settings tab which allows configuration of the SQL server/instance and username/password.   It allows you to test the SQL connection prior to starting the application.   You can also choose what type of alerts to notify on.  By default, only error events are alerted on, but you can choose to be notified on Warnings and Audit failures. You can also now choose how many minutes back you want to query the EventsDb.  You also set an SMTP server, port and an email address to send the alerts from.  You can add multiple addresses in the alert recipients field.  You can also test the SMTP connection by sending a test email.   All of the settings are saved in an xml configuration file, and the SQL password is 256 bit AES encrypted.    To start the application, simply click the start button, or start with the /silent switch.   The silent switch starts the application automatically and minimizes to the system tray.  Minimizing the application will also send it to the system tray.  By default, the application polls every 60 seconds for new events to alert on.  There is now a context menu from the tray that allows you to refresh now, show the full form and exit the application.

UPDATE – The application is available from the link below.  I have also added some new features.   There is a readme.txt in the .zip that details how to configure it.

Version 1.5:  Added ability to clear events, system tray context menu and how far back to query events

Version 1.6: Added Database Name field  and Table Prefix options for SQL configuration

Horizon View Events Notifier Version 1.6 Download:


Horizon View Event Notifier – Alerts


Horizon View Event Notifier – Settings


Horizon View Event Notifier – System Tray

Starting the App

Starting the App

Stopping The App

Stopping The App

Posted in Horizon View Utilities | Tagged | 26 Comments