AppUserList – Application User List

Torno dopo diversi mesi con un nuovo post del mio blog, presentandovi un tool che ho sviluppato, in Powershell, nelle scorse settimane.

Presso un cliente Enterprise, abbiamo avuto la necessità di effettuare una analisi approfondita di quali applicazioni vengono avviate dagli utenti durante le loro sessioni di lavoro all’interno di Desktop pubblicati tramite Citrix.

Se ci avessero richiesto quali applicazioni seamless venissero avviate dagli utenti, sarebbe stato facile estrarre le informazioni dal Director; in questo caso al cliente serviva il dettaglio di quali applicazioni, presenti nelle VDI e negli Hosted Shared Desktop, venissero realmente utilizzare dagli utenti (per poter valutare ottimizzazioni dei vari Catalog). Queste informazioni sono sì visibili durante l’analisi di una singola sessione in Director (processi in uso) ma ci serviva tenerne uno storico e poter effettuare analisi su dati di medio/lungo periodo.

Ho approcciato per cui la richiesta ricercando in rete quale potesse essere il metodo migliore, in Windows, per intercettare gli eseguibili avviati dagli utenti; la soluzione che si è dimostrata ideale è stata leggere la porzione di registro utente dove il sistema operativo salva gli eseguibili avviati dall’utente stesso (e ne tiene traccia, potenzialmente, per sempre).

La posizione del registro è la seguente:

HKEY_USERS\$SID\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Compatibility Assistant\Store

Dove al posto di $SID va sostituito il codice SID relativo all’utente in Active Directory.

In alternativa, per leggere la stessa porzione di registro (se non in sessione remota) è possibile utilizzare la posizione:

HKEY_CURRENT_USERS\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Compatibility Assistant\Store

Grazie a questa chiave di registro, mi è stato possibile elaborare uno script powershell che, a fronte dell’estrazione degli utenti connessi in quel momento sul Desktop Citrix, leggesse la chiave di cui sopra (per ogni utente) e ne riportasse il contenuto in un database SQL Server. A seguito della lettura della chiave, ho provveduto alla pulizia della stessa, così che alla successiva rilettura mi riportasse solo gli ultimi eseguibili avviati.

Ho per cui elaborato un tool composto da tre componenti:

  • AULService: Agent in esecuzione nelle macchine Worker Citrix, che intercetta le applicazioni avviate dagli utenti e scrive le informazioni nel database;
  • AULMonitor: Database SQL Server centrale, in cui scrivo e da cui leggo per la generazione dei report;
  • AULReport: Client per la generazione dei report, che attinge le informazioni dal database, le elabora e ne permette l’estrazione in Excel;

Il tool è stato sviluppato nell’ottica di restare semplice, leggero e funzionale (per cui senza troppi “fronzoli”).

Di seguito vi riporto un esempio di schermate del client di reporting (AULReport):

In questa prima schermata dell’applicazione è possibile visionare l’elenco delle applicazioni avviate nel periodo intercorso tra la data in “From” e la data in “To”, con relativo conteggio delle esecuzioni avvenute. Si noti che il conteggio tiene conto di un avvio per ogni utente, per applicazione, per giorno; se un utente avvia 100 volte Excel in un giorno (sulla stessa VM) verrà conteggiato un solo avvio (non ci interessa sapere quante volte viene avviata l’applicazione, ma bensì quali ed in che periodo temporale).

Cliccando su una applicazione in elenco, si aprirà una seconda schermata con dettagli in più, relativamente alle esecuzioni di questa applicazione nel periodo selezionato:

Avremo un grafico che mostrerà l’andamento dell’utilizzo dell’applicazione stessa; l’elenco dei path che sono stati indicati come referenti alla stessa applicazione ed il dettaglio di quante volte questa applicazione è stata avviata all’interno dei vari Worker (con relativo Machine Catalog e Delivery Group).

Sempre nella prima schermata dell’applicazione, cliccando con il tasto destro del mouse su una app, verrà mostrato l’elenco degli utenti che l’hanno avviata nel periodo:

Cliccando sull’utente selezionato, verrà aperto il dettaglio seguente:

Per poter rendere “parlante” il path di un eseguibile, è stata predisposta una schermata specifica, dove è possibile associare un nome ad ogni eseguibile:

Effettuando questa azione, ad ogni nome potranno appunto corrispondere più eseguibili; soluzione che permette di aggregare i report per applicazione, consolidando diversi path in un unico report. Per esempio per quanto riguarda l’applicazione “Office 2016 – Excel”, nel nostro caso abbiamo potuto aggregare eseguibili della versione a 32bit e 64bit con l’unico nome “Office 2016 – Excel”. Se avessimo voluto suddividere la release a 32bit da quella a 64bit, avremmo potuto assegnare due nomi differenti ad eseguibili di versioni diverse.

Una tabella specifica riporta le referenze di Machine Catalog e Delivery Group, per ogni macchina analizzata:

L’ultima schermata che ho implementato, è basata su una vista TreeView:

A sinistra viene mostrato l’elenco degli utenti con il dettaglio delle applicazioni eseguite nel periodo; cliccando su ogni applicazione verrà mostrato a destra l’elenco delle esecuzioni e relative informazioni di dettaglio (path dell’eseguibile, Worker Citrix e data di esecuzione).

Nei prossimi giorni aggiungerò qualche dettaglio in più sulla soluzione implementata e, non appena sarà tutto pronto, lo renderò disponibile gratuitamente alla comunità!

Stay tuned!

Share with:


15 pensieri su “AppUserList – Application User List

    • balduz84 dice:

      Hi Kaveh,

      No, this tool has no cost…it will always be free for the community. Also, in a few days I should be able to publish the new version which adds several new features.

      Silvio

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.