public SessionCitrix GetSessionUserByResource(string resourceName, string userName) { SessionCitrix session = new SessionCitrix(); using (Runspace rs = RunspaceFactory.CreateRunspace()) { rs.Open(); System.Management.Automation.PowerShell ps = System.Management.Automation.PowerShell.Create(); ps.Runspace = rs; PSSnapInException ex; rs.RunspaceConfiguration.AddPSSnapIn("Citrix.Broker.Admin.V2", out ex); ps.AddCommand("Get-BrokerSession"); ps.AddParameter("ApplicationInUse", resourceName); ps.AddParameter("UserName", String.Format("*\\{0}",userName)); foreach (PSObject app in ps.Invoke()) { session.SessionType = app.Properties["SessionType"].Value.ToString(); session.Uid = Convert.ToInt32(app.Properties["Uid"].Value); session.UserFullName = userName; } } return session; }
/// <summary> /// Consulta las sesiones citrix de cada recurso. Por cada recurso, se consulta los miembros del grupo de directorio activo /// asociado al recurso y luego se consulta si tiene una sesión en citrix, si tiene una sesión se agrega a la lista de SesionesActuales. /// </summary> public void LoadSession() { List<SessionCitrix> activeSessions = new List<SessionCitrix>(); foreach (var resource in Resources) { var recurso = Recursos.FirstOrDefault(r => r.nombre == resource.Name && r.estado == "1"); if (recurso.id != 0) { foreach (string userGroup in DARepository.GetUsersByGroup(recurso.grupo_da)) { SessionCitrix session = new SessionCitrix(); if (resource.Type == "Desktop") { session = _brokerXD.GetSessionUserByResource(resource.Name, userGroup); } else { session = _brokerXA.GetSessionUserByResource(resource.Name, userGroup); } if (session.Uid != 0) { SessionCitrix active = activeSessions.FirstOrDefault(r => r.Uid == session.Uid); if (active == null) { List<string> ResourceInUse = new List<string>(); ResourceInUse.Add(resource.Name); session.ResourceInUse = ResourceInUse; activeSessions.Add(session); } else { List<string> ResourceInUse = active.ResourceInUse; ResourceInUse.Add(resource.Name); active.ResourceInUse = ResourceInUse; } } } } } SesionesActuales = activeSessions; }