예제 #1
0
        public Response Get()
        {
            var response = new Response();

            try
            {
                using (var server = new TerminalServicesManager().GetLocalServer())
                {
                    server.Open();
                    var sessions = server.GetSessions()
                                   .Where(s => !string.IsNullOrEmpty(s.UserName))
                                   .Select(s => new
                    {
                        Id        = s.SessionId,
                        User      = s.DomainName + @"\" + s.UserName,
                        LoginDate = s.LoginTime?.ToString("g"),
                        State     = s.ConnectionState.ToString()
                    });
                    response.Data = sessions;
                    return(response);
                }
            }
            catch (Exception ex)
            {
                Log.Error(ex.Message);
                response.AddErrorNotification(ex.Message, ex.StackTrace);
                return(response);
            }
        }
예제 #2
0
        public static void LogSessionData(Guid currentServiceRunGuid, int sessionId, SessionTrackingEvents sessionTrackingEvent, string reason, bool logAllExistingSessions = false)
        {
            using (ITerminalServer server = new TerminalServicesManager().GetLocalServer())
            {
                SessionTracking sessionTracking = null;
                if (!File.Exists(GlobalSettings.DataFilePath))
                {
                    sessionTracking = new SessionTracking();
                    sessionTracking.SessionTrackingParamsList = new List <SessionTrackingParams>();
                    File.Create(GlobalSettings.DataFilePath).Close();
                    Utility.SerializeObjectToFile <SessionTracking>(sessionTracking, GlobalSettings.DataFilePath);
                }

                server.Open();
                foreach (ITerminalServicesSession session in server.GetSessions().Where(o => o.LoginTime.HasValue))
                {
                    if (logAllExistingSessions || session.SessionId == sessionId)
                    {
                        SessionTrackingParams sessionTrackingParams = new SessionTrackingParams()
                        {
                            ServiceRunGuid = currentServiceRunGuid,
                            SessionId      = session.SessionId,
                            LogonDT        = session.LoginTime.HasValue ? session.LoginTime.Value : DateTime.MinValue,
                            EventDT        = DateTime.Now,
                            UserAccount    = (session.UserAccount != null && session.UserAccount.Value != null ? session.UserAccount.Value : String.Empty),
                            Event          = Enum.GetName(typeof(SessionTrackingEvents), sessionTrackingEvent),
                            Reason         = reason
                        };
                        string sessionTrackingParamsSerialized = Utility.SerializeObject <SessionTrackingParams>(sessionTrackingParams);

                        // Faster and not-so-clean way to write XML node to the end of the serialized List<SessionTrackingParams>,
                        // cleaner way would be to deserialize, add node and serialize whole list which might contain hundreds of records, but it would
                        // possibly be much slower in case of large file.
                        string text = File.ReadAllText(GlobalSettings.DataFilePath);
                        if (text.Contains("</SessionTrackingParamsList>"))
                        {
                            text = text.Replace(
                                "</SessionTrackingParamsList>",
                                sessionTrackingParamsSerialized + Environment.NewLine + "</SessionTrackingParamsList>");
                        }
                        else
                        {
                            text = text.Replace(
                                "<SessionTrackingParamsList />",
                                "<SessionTrackingParamsList>" + Environment.NewLine + sessionTrackingParamsSerialized + Environment.NewLine + "</SessionTrackingParamsList>");
                        }
                        File.WriteAllText(GlobalSettings.DataFilePath, text);

                        if (!logAllExistingSessions)
                        {
                            break;
                        }
                    }
                }
                server.Close();
            }
        }
예제 #3
0
 public static bool checkUserLogedIn(string username, string computerName)
 {
     try {
         if (ping(computerName))
         {
             ITerminalServer server = new TerminalServicesManager().GetRemoteServer(computerName);
             server.Open();
             //ITerminalServicesSession session = server.GetSessions().First(_session => _session.UserAccount.Value.ToLower() == username.ToLower());
             foreach (ITerminalServicesSession session in server.GetSessions())
             {
                 if (session.UserAccount != null && session.UserName.ToLower() == username.ToLower()
                     & session.ConnectionState == Cassia.ConnectionState.Active)
                 {
                     return(true);
                 }
             }
         }                 //else MessageBox.Show($"{computerName} don't ping");
     } catch {
         //MessageBox.Show(e.Message);
     }
     return(false);
 }
예제 #4
0
        public Response Delete(int id)
        {
            var response = new Response();

            try
            {
                Log.Debug($"DropUserSession called for session id {id}.");

                using (var server = new TerminalServicesManager().GetLocalServer())
                {
                    server.Open();
                    var userSession = server.GetSessions()
                                      .FirstOrDefault(s => s.SessionId == id);

                    if (userSession == null)
                    {
                        response.AddErrorNotification($"User session {id} not found.");
                        return(response);
                    }

                    userSession.Logoff(true);

                    var message = $"Session closed for user {userSession.UserName}.";
                    Log.Debug(message);
                    response.AddSuccessNotification(message);
                }

                return(response);
            }
            catch (Exception ex)
            {
                Log.Error(ex.Message);
                response.AddErrorNotification(ex.Message, ex.StackTrace);
                return(response);
            }
        }