Quick script on how to get lastlogin session using horizon view powercli
# Connect to Horizon Connection Server
Import-Module VMware.VimAutomation.HorizonView
$ConnectionBroker = "your-horizon-server"
$vcServer = "your-vcenter-server"
Connect-HVServer -Server $ConnectionBroker
Connect-VIServer -Server $vcServer
## Main Script
# Get all Horizon VDI desktops
$hVms = Get-HVMachine
# Store results in an array
$lastLoginInfo = @()
foreach ($vm in $hVms) {
$vmName = $vm.Base.Name # Try using Base.Name for VM Name
$user = $vm.AssignedUser
$lastSessionTime = $vm.LastSessionDate
$status = $vm.SessionState
if ($vmName) {
$lastLoginInfo += [PSCustomObject]@{
VMName = $vmName
User = $user
LastLogin = $lastSessionTime
Status = $status
}
}
}
# Display the results
$lastLoginInfo | export-csv -path c:\temp\VDILogon.csv -notypeinformation
VIA API
$hvServer = Connect-HVServer -Server "your-horizon-server"
# Get Horizon services
$hvServices = $hvServer.ExtensionData
$machines = $hvServices.ViewClientMachine.QueryMachines()
# Display user session details
$machines | Select-Object Name, AssignedUser, LastSessionState, LastSessionDate | Format-Table -AutoSize
## VIA vCenter events
Connect-VIServer -Server "your-vcenter-server"
$lastLogins = @()
$vdiVMs = Get-VM | Where-Object { $_.Name -match "VDI" }
foreach ($vm in $vdiVMs) {
$events = Get-VIEvent -Entity $vm -MaxSamples 1000 | Where-Object { $_.FullFormattedMessage -match "User .* logged in" }
if ($events) {
$lastEvent = $events | Sort-Object CreatedTime -Descending | Select-Object -First 1
$lastLogins += [PSCustomObject]@{
VMName = $vm.Name
User = $lastEvent.UserName
LoginTime = $lastEvent.CreatedTime
}
}
}
$lastLogins | Format-Table -AutoSize
API Session
# Check Services
$hvServices = $hvServer.ExtensionData
if ($hvServices -eq $null) {
Write-Host "Error: Horizon Services are not available. Check connection."
} else {
Write-Host "Successfully connected to Horizon Services."
}
###Testing to fix above
$hvServer = Connect-HVServer -Server "your-horizon-server"
$hvServices = $hvServer.ExtensionData
# Get desktop machines
$desktopSummary = $hvServices.Inventory.DesktopSummaryDataHelper.QueryDesktopSummaryData()
$desktopSummary | Select-Object Name, DesktopSummaryData |
Format-Table -AutoSize
##https://blogs.vmware.com/euc/2020/01/vmware-horizon-7-powercli.html
Query Session in VDI
$hvServer = Connect-HVServer -Server "your-horizon-server"
$hvServices = $hvServer.ExtensionData
# Get session details
$sessions = $hvServices.Session.SessionList | Select-Object UserName, MachineName, SessionState, LastSessionDate
$sessions | Format-Table -AutoSize