Horizon – Upgrade Client repository with Horizon 2506 Clients

Release date: November 11th 2025

Welcome to my Omnissa Horizon series. According to the Horizon Client for Windows Release Notes, these are the changes to the Horizon Client:

  • What’s New
    • Universal Broker
      • Horizon Client for Windows can now connect to Horizon Cloud next-gen Universal Broker. For more information, see the Universal Broker Guide.
    • useExisting Parameter
      • The useExisting parameter’s behavior is now standardized across platforms. The behavior of the parameter in Horizon Client for Windows now matches the behavior in Horizon Client for Linux, and the Windows Uniform Resource Idenfier (URI) matches Linux URI behavior. This ensures predictable session reuse and reduces memory/CPU overhead by maintaining a single Horizon Client instance instead of spawning multiple processes.

Upgrading the Horizon Client is the first step in upgrading a Horizon environment, as shown below. As the Horizon Client is distributed in all kinds of different ways to users, GPO, application deployments, scripts, I won’t go into this now.

In a production environment, it is advisable to have the users upgrade their clients first. A smart approach to doing this, is to alert the users of this by using Client Restrictions. The newer Horizon Client editions are backward compatible and it is preferable to have as many as possible upgraded before upgrading the rest of the Horizon components. This can bee done by editing the Client Restrictions under Global Settings in Horizon Administrator GUI.

In my setup, I will block clients older than 8.10.0 and send warning to users on this version.

I start out by downloading the installation media from Omnissa Customer Connect

In my lab, I use the Horizon Portal to distribute clients. Previously, I have created this distribution point manually. In this session however, I will show how to do this using PowerShell.

Prequisites:

  • PowerShell Administrative access to the Connection-server
  • Pre-downloaded client binaires to network share
  • Pre-configured portal-links-html-access.properties file

I first create the following credentials to be used in the script:

  • vCenter admin-user:
New-VICredentialStoreItem -User <user> -Password <user> -Host <server> -File C:\<your location.xml>
  • Horizon admin-user:
$credential = Get-Credential
$credential | Export-CliXml -Path '<path>hz_admin.xml'

Now that I have the credentials ready, I am good to go. (PS: I know I’m no programmer and a lot of this script have the potential for improvement, but, it gets the job done, and that’s good enough for me. If You have input to making this script even better, please leave a comment below, it will be greatly appreciated!)

Upgr_cli_rep.ps1

# --- Initialize PowerCLI Modules --- 
   
Import-Module VMware.VimAutomation.Core
Import-Module VMware.VimAutomation.Common
Set-PowerCLIConfiguration -Scope User -ParticipateInCeip $false -Confirm:$false
Set-PowerCLIConfiguration -InvalidCertificateAction ignore -Confirm:$false
Set-PowerCLIConfiguration -DefaultVIServerMode Multiple -Confirm:$false

# --- Connect to vCenter with Get-VICredentialStoreItem ---

$viserver = "vCenter fqdn"
$viuser = Get-VICredentialStoreItem -File "<path to vCenter Credentials>.xml" -host $viserver
Connect-viserver -Server $viserver -User $viuser.user -Password $viuser.password

$cs = "fqdn connection server"

# --- Configure PSSession ---

$credential = Import-CliXml -Path "<path to horizon admin>hz_admin_${env:USERNAME}_${env:COMPUTERNAME}.xml"
$session = New-PSSession -ComputerName $cs -Credential $credential -Authentication CredSSP

# --- Define variables, create folders and copy files ---

Invoke-Command -Session $session -ScriptBlock {
    
# Variables
    $ClientDir = "C:\Program Files\Omnissa\Horizon\Server\broker\webapps\downloads"
    $ClientSource = "<Network Path to Horizon Clients>Latest*"
    $PortalLnksDest = "C:\ProgramData\Omnissa\Horizon\portal"
    $PortalLnksOrg = "C:\ProgramData\Omnissa\Horizon\portal\portal-links-web-client.properties"
    $PortalLnksBackup = "C:\ProgramData\Omnissa\Horizon\portal-links-web-client.properties.bak"
    $PortalLnksSource = "<Network Path>portal-links-web-client.properties"
           
# Creating downloads-folder, copy client installers
    New-Item -Path $ClientDir -type directory -Force
    Copy-Item -Path $ClientSource -Destination $ClientDir -Force

# Backup and replace portal-links-html-access.properties
    Copy-Item $PortalLnksOrg $PortalLnksBackup -Force
    Copy-Item $PortalLnksSource $PortalLnksDest -Force
}

Remove-PSSession $session

# --- Restart Connection Server ---
Write-Host "Restarting Connection Server" -ForegroundColor Green

Get-VM $cs | Restart-VMGuest

Start-Sleep 180

$session = New-PSSession -ComputerName $cs -Credential $credential -Authentication CredSSP

# --- Check Service-status after Connection Server reboot ---

Invoke-Command -Session $session -ScriptBlock {
    
    $SvcName = 'wsbroker'
    $SvcDisplayName = "Omnissa Horizon View Connection Server Service"
    $Svc = Get-Service -Name $SvcName
    
    # Waiting for Omnissa Horizon View Connection Server Service to start"
    Write-Host "Waiting for Omnissa Horizon View Connection Server Service to start" -ForegroundColor Green
    if ($Svc.Status -eq 'Running')
        {
        Write-Host "$SvcDisplayName is now Running" -ForegroundColor Green
        }

    if ($Svc.Status -ne 'Running')
        {
        Write-Host "Waiting for $SvcDisplayName to start" -ForegroundColor Green
        $Svc.WaitForStatus("Running")
        Write-Host "$SvcDisplayName is now running" -ForegroundColor Green
        }
}

# --- Disconnect from vCenter ---
write-host "Disconnecting from vCenter" -ForegroundColor Green
Disconnect-VIServer -Server $viserver -Confirm:$false

In the VMware Horizon portal, the users can now click “Install Omnissa Horizon Client”, which will install the Horizon Client directly from the Connection Server.

Horizon 8 Documentation:

Omnissa Documentation:


Horizon – Upgrades

Horizon planning, deployment etc.

Disclaimer: Every tips/tricks/posting I have published here, is tried and tested in different it-solutions. It is not guaranteed to work everywhere, but is meant as a tip for other users out there. Remember, Google is your friend and don’t be afraid to steal with pride! Feel free to comment below as needed.

Leave a comment