示例#1
0
        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;
        }
示例#2
0
        /// <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;
        }