E’ passato veramente tanto tempo dall’ultimo post! Nel frattempo sono successe tantissime cose (pandemia a parte) e si sono avvicendate moltissime novità in ambito tecnologico. Quest’oggi volevo riprendere affrontando una necessità che recentemente mi si è presentata più volte: come recuperare l’indirizzo IP del client (ed eventualmente altri dati) che stiamo utilizzando per collegarci ad un ambiente VDI, sia single session, sia multisession.
La prima soluzione che mi è venuta in mente è quella di utilizzare una semplice query WMI:
Get-WmiObject -Namespace root\Citrix\euem -Class citrix_euem_clientConnect
Il primo problema è che se stiamo lavorando su una macchina multisessione, l’output di questo comando contiene i dettagli di tutte le sessioni utente. Occorre quindi applicare un filtro per selezionare solo il nostro utente:
Get-WmiObject -Namespace root\Citrix\euem -Class citrix_euem_clientConnect | ?{$_.UserName -eq $env:UserName}
L’output di questo comando risulta così:
Come potete vedere nel campo ClientMachineIP abbiamo il nostro indirizzo…. ehm, non proprio. Se abbiamo più schede con indirizzi diversi (per esempio abbiamo installato client VPN, virtualizzatori come VirtualBox o VMWare Player/Workstation) l’indirizzo che vediamo qui potrebbe non essere quello correto.
Facendo un po’ di ricerca in più possiamo facilmente scoprire che i dati della nostra sessione sono in una chiave di registry, in particolare sotto HKLM:\SOFTWARE\Citrix\Ica\Session\<sessione>\Connection . Chiaramente <sessione> va sostituito con il numero della nostra sessione, che varia ad ogni connessione e che possiamo vedere banalmente con il comando quser. In realtà anche la query WMI di prima ha una bellissima riga che inizia con SessionID!
In questo modo il gioco è fatto: dalla query WMI possimo ottenere la SessionID
$w = Get-WmiObject -Namespace root\Citrix\euem -Class citrix_euem_clientConnect | ?{$_.UserName -eq $env:UserName}
…possiamo inserirla nel path corretto…
$path = “HKLM:\SOFTWARE\Citrix\Ica\Session\$($w.SessionID)\Connection”
…e così andare a leggere la chiave completa…
$k = Get-ItemProperty -Path $path
A questo punto possiamo leggere il valore, questa volta l’IP corretto da cui ci siamo collegati:
$k.ClientAddress
Riassumo qui di seguito le poche righe:
$w = Get-WmiObject -Namespace root\Citrix\euem -Class citrix_euem_clientConnect | ?{$_.UserName -eq $env:UserName}
$path = “HKLM:\SOFTWARE\Citrix\Ica\Session\$($w.SessionID)\Connection”
$k = Get-ItemProperty -Path $path
$k.ClientAddress