Horizon VDI Last Login Session via Powercli

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

You May Also Like

About the Author: VirtuallyThatGuy

Leave a Reply

Your email address will not be published. Required fields are marked *