A Powerful New Chapter for Login VSI
If you haven’t seen it in the headlines, Login VSI sent a ripple through the EUC and AVD ecosystem with its acquisition of Hydra – a tool that helps streamline your AVD management and monitoring capabilities. Everyone who has gone through or is going through a migration from Horizon/Citrix to native AVD is met with quite a shock – most of the tools they’re used to that helps streamline management and monitoring are completely gone, or they have to go through fifty steps to get there. This presents a huge barrier for companies getting out of the datacenter business but need to provide some sort of virtual desktop solution to their end users. That’s where Hydra comes in!
Integrations
One question I am constantly getting from existing Login Enterprise customers: what integrations are there between Hydra and LE today? Well – while there aren’t any direct integrations available in the GUI out of the box (yet), one thing you can immediately do is use Hydra’s powerful scripting engine, where the sky is the limit. With the click of a mouse, I can instantly convert a Host Pool to an automated test bed. Check it out:
The script does two main things:
1) Downloads the Logon EXE ZIP, places it in C:\LoginVSI, and extracts it
2) Creates a shortcut in the shell:common startup directory and uses the applianceFQDN variable for the args.
Within your Hydra portal, clone a new script from the template. Create the below script and just fill in the $applianceFQDN variable with your appliance FQDN:
LogWriter("Downloading Logon EXE")
# Base FQDN of the appliance
$applianceFQDN = 'https://yourApplianceFQDN.com'
# URL of the ZIP file to download
$url = "$applianceFQDN/contentDelivery/api/logonApp"
# Arguments to pass to the EXE (adjust as needed)
$arguments = $applianceFQDN
# Define temp paths
$tempDir = 'C:\LoginVSI'
$zipName = [IO.Path]::GetFileName($url)
$zipPath = Join-Path $tempDir "$zipName.zip"
$extractDir = Join-Path $tempDir ([IO.Path]::GetFileNameWithoutExtension($zipName))
# Define shortcut properties
# Define target executable and Startup shortcut paths
$targetPath = 'C:\LoginVSI\logonApp\LoginPI.Logon.exe'
$shortcutPath = "$env:ALLUSERSPROFILE\Microsoft\Windows\Start Menu\Programs\Startup\LoginPI_Logon.lnk"
# Ensure the extract directory exists (or recreate it)
if (Test-Path $extractDir) {
Remove-Item -LiteralPath $extractDir -Recurse -Force
}
New-Item -ItemType Directory -Path $extractDir | Out-Null
try {
# Download the ZIP file
Invoke-WebRequest -Uri $url -OutFile $zipPath -UseBasicParsing
# Extract the ZIP into $extractDir; -Force will overwrite if files already exist
Expand-Archive -Path $zipPath -DestinationPath $extractDir -Force
# Find the first .exe in the extracted folder (recursively)
$exe = Get-ChildItem -Path $extractDir -Filter '*.exe' -Recurse |
Sort-Object LastWriteTime -Descending |
Select-Object -First 1
if (-not $exe) {
throw "No executable (.exe) found in '$extractDir'."
}
# Create the shortcut
try {
# Verify the target executable exists
if (-not (Test-Path -Path $targetPath -PathType Leaf)) {
throw "Target executable not found: $targetPath"
}
# Ensure the Startup folder exists (it should, but just in case)
$startupFolder = Split-Path -Parent $shortcutPath
if (-not (Test-Path -Path $startupFolder -PathType Container)) {
throw "Startup folder does not exist: $startupFolder"
}
# Create the WScript.Shell COM object
try {
$WshShell = New-Object -ComObject WScript.Shell
}
catch {
throw "Unable to create WScript.Shell COM object: $_"
}
# Create the shortcut
$shortcut = $WshShell.CreateShortcut($shortcutPath)
# Assign properties to the shortcut
$shortcut.TargetPath = $targetPath
$shortcut.Arguments = $arguments
$shortcut.WorkingDirectory = Split-Path -Parent $targetPath
# Save the shortcut to disk
$shortcut.Save()
Write-Host "Shortcut successfully created at: $shortcutPath"
LogWriter("Shortcut created!")
}
catch {
Write-Error "Failed to create shortcut: $_"
LogWriter("Failed to create shortcut! $_")
}
}
catch {
Write-Error "An error occurred: $_"
LogWriter("An error occurred! $_")
}
Now, head to your Host Pool details that you want to convert to an automated testing pool and run the script!


Now, monitor the results within the same page!

Now I’ll kick off an Application Test and watch my Launcher machine automatically launch the AVD pool and start the test…


It’s as easy as that!
Now – what if we wanted to convert a Host Pool to an entire fleet of Launcher machines? Stay tuned for Part 2… 😉
What other Hydra+LE integrations are you looking for? Send me a note and let’s talk!
Also – did you know that Hydra is available for a FREE FULLY FEATURED 30 day trial in the Azure Marketplace? Even after the 30 days, it’s limited to 5 hosts per Host Pool and a single tenant, which is still great for dev/test environments.
Happy automating!