viernes, 19 de abril de 2013

Citrix: información de sesiones

En un entorno Citrix a veces es necesario conocer rápidamente las sesiones de usuario iniciadas en un servidor concreto, como por ejemplo, para diagnosticar alguna incidencia con alguna aplicación.

Para no perder tiempo en acceder a la consola de administración y averiguar esta información, he preparado un script con PowerShell que, indicando el nombre de un servidor Citrix en la variable $nombre_host y ejecutándolo en cualquier otro host con los permisos suficientes muestra la información de las sesiones de Citrix activas:

# información de sesiones citrix


# nombre del servidor de Citrix
$nombre_host = hostname


# fecha/hora/minuto/segundo de la toma
$t = get-date
$anio = $t.year
$mes = $t.month
$dia = $t.day
$hora = $t.hour
$minuto = $t.minute
$segundo = $t.second

$tiempo = "$anio $mes $dia $hora $minuto $segundo"

# captura sesiones actuales del servidor de Citrix indicado
$sesiones = qwinsta /SERVER:$nombre_host

# elimina primera línea
$sesiones = $sesiones[1..$sesiones.length]

# inicia variables
$usuario = ""
$sesionid = 0
$total_cpu = 0
$mem = 0

foreach ( $sesion in $sesiones )
{
  # si se trata de una sesión de citrix
  if ( $sesion -match "wdica" )
  {
    $sesion = $sesion -replace “\s+”,” ”
    $t = $sesion.split(" ")

    # captura usuario e id de sesión
    $usuario = $t[2]
    $sesionid = $t[3]

    # inicia total_cpu y mem para esta sesión/usuario
    $total_cpu = 0
    $mem = 0

    # captura la memoria y el total de cpu de los procesos
    # de cada sesión/usuario de citrix
    $procesos = get-process | where {$_.sessionid -eq $sesionid}
    foreach ( $proceso in $procesos )
    {
      $total_cpu += $proceso.cpu
      $mem += $proceso.ws
    }
    $mem = [int]($mem / 1mb)
    write-host $tiempo $nombre_host $usuario $total_cpu $mem
  }
}


No hay comentarios: