private void SearchActiveSessions(LogFileParser.foundElementInfo [] selectedUserPCs, string selectedUser)
        {
            ITerminalServicesManager manager = new TerminalServicesManager();

            for (int i = 0; i < selectedUserPCs.Length; i++)
            {
                try {
                    Ping        ping        = new Ping();
                    PingOptions pingOptions = new PingOptions();
                    pingOptions.DontFragment = true;
                    string    data   = "fff";
                    byte[]    buffer = Encoding.ASCII.GetBytes(data);
                    PingReply reply  = ping.Send(selectedUserPCs[i].name, 120, buffer, pingOptions);
                    if (reply.Status == IPStatus.Success)
                    {
                        using (ITerminalServer server = manager.GetRemoteServer(selectedUserPCs[i].name)) {
                            server.Open();
                            foreach (ITerminalServicesSession session in server.GetSessions())
                            {
                                if (session.UserName.ToLower() == selectedUser.ToLower() && session.ConnectionState == ConnectionState.Active)
                                {
                                    selectedUserPCs[i].name = "->" + selectedUserPCs[i].name + "<-";
                                }
                            }
                        }
                    }
                } catch { }
            }
        }
        private void ValidateSessionsAsync()
        {
            ThreadPool.QueueUserWorkItem(async(object o) =>
            {
                ITerminalServicesManager manager = new TerminalServicesManager();
                using (ITerminalServer server = manager.GetLocalServer())
                {
                    server.Open();

                    var localSessions = server.GetSessions().Where(s => s.SessionId > 0 && (s.ConnectionState == Cassia.ConnectionState.Active));
                    var messages      = await _msgReader.GetAllMessages();

                    if (messages.Count(m => m.Command.Type == WinGuard.Domain.Enumaretions.ClientCommandType.LOGOUT) > 0 &&
                        localSessions.Any(s => messages.Any(m => m.Command.ClientIdentifier == s.SessionId.ToString())))
                    {
                        foreach (var session in localSessions.Where(s => messages.Any(m => m.Command.ClientIdentifier == s.SessionId.ToString())))
                        {
                            session.Logoff();
                        }
                        return;
                    }
                    foreach (ITerminalServicesSession session in localSessions)
                    {
                        await _authService.Login(_encryptService.EncryptMessage(session.SessionId.ToString()),
                                                 _encryptService.EncryptMessage(session.UserName));
                    }
                }
            });
        }
        public Response GetUserSesssions()
        {
            var response = new Response();

            try
            {
                var manager = new TerminalServicesManager();
                using (ITerminalServer server = manager.GetLocalServer())
                {
                    server.Open();
                    var sessions = server.GetSessions()
                                   .Where(s => !string.IsNullOrEmpty(s.UserName))
                                   .Select(s => new
                    {
                        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.Status = Status.Error;
                response.Notifications.Add(new Notification
                {
                    Message       = ex.Message,
                    MessageDetail = ex.StackTrace,
                    Status        = Status.Error
                });
                return(response);
            }
        }
Exemple #4
0
        public static List <ITerminalServicesSession> GetList()
        {
            List <ITerminalServicesSession> session_list = new List <ITerminalServicesSession>();

            ITerminalServicesManager manager = new TerminalServicesManager();

            using (ITerminalServer server = manager.GetLocalServer())
            {
                server.Open();
                foreach (ITerminalServicesSession session in server.GetSessions())
                {
                    // skip the SYSTEM session
                    if (session.SessionId == 0)
                    {
                        continue;
                    }

                    // if there is no username the session is special accounts
                    if (session.UserName == String.Empty)
                    {
                        continue;
                    }

                    session_list.Add(session);
                }
            }

            return(session_list);
        }
 private static int GetUserSessionId(string username)
 {
     try
     {
         ITerminalServicesManager manager = new TerminalServicesManager();
         using (ITerminalServer server = manager.GetLocalServer())
         {
             server.Open();
             foreach (ITerminalServicesSession session in server.GetSessions())
             {
                 NTAccount account = session.UserAccount;
                 if (account == null)
                 {
                     continue;
                 }
                 var userName = account.Value.Split('\\')[1];
                 if (userName.ToLower().Equals(username.ToLower()))
                 {
                     return(session.SessionId);
                 }
             }
         }
         return(-1);
     }
     catch (Exception)
     {
         return(-1);
     }
 }
 /// <overloads><inheritdoc /></overloads>
 /// <inheritdoc />
 public IList <ITerminalServicesSession> GetSessions(string serverName)
 {
     using (ITerminalServer server = GetRemoteServer(serverName))
     {
         server.Open();
         return(server.GetSessions());
     }
 }
 /// <inheritdoc />
 public IList <ITerminalServicesSession> GetSessions()
 {
     using (ITerminalServer server = GetLocalServer())
     {
         server.Open();
         return(server.GetSessions());
     }
 }
 static void CheckBackupTime(object sender, System.Timers.ElapsedEventArgs e)
 {
     if ((int)DateTime.Now.DayOfWeek != Settings.Default.backupday)
     {
         return;
     }
     backupTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, (int)Settings.Default.backuphour, (int)Settings.Default.backupminute, 0);
     if (backupTime > DateTime.Now)
     {
         if ((int)(backupTime - DateTime.Now).TotalMinutes <= Settings.Default.startcheck)
         {
             foreach (var session in activeusers)
             {
                 if (!Notifications.ContainsKey(session.SessionId))
                 {
                     SendMessage(session.SessionId, Settings.Default.alert1box.Replace("{time}", backupTime.ToString("HH:mm")));
                     Notifications.Add(session.SessionId, DateTime.Now);
                 }
                 else
                 {
                     if ((DateTime.Now - Notifications[session.SessionId]).TotalMinutes >= (int)Settings.Default.alert_interval)
                     {
                         SendMessage(session.SessionId, Settings.Default.alert1box.Replace("{time}", backupTime.ToString("HH:mm")));
                         Notifications[session.SessionId] = DateTime.Now;
                     }
                 }
             }
         }
     }
     else
     {
         if (backupTime < startuptime)
         {
             FinishedBackups.Add(backupTime);
             return;
         }
         if (!FinishedBackups.Contains(backupTime))
         {
             ITerminalServicesManager manager = new TerminalServicesManager();
             using (ITerminalServer server = manager.GetLocalServer())
             {
                 server.Open();
                 foreach (ITerminalServicesSession session in server.GetSessions())
                 {
                     KillParusWithNotifiction(session);
                 }
             }
             if (Settings.Default.backupauto && Application.OpenForms.OfType <BackupWindow>().Count() == 0)
             {
                 bwindow = new BackupWindow();
                 bwindow.ShowDialog();
             }
         }
     }
 }
 /// <summary>
 /// Register all active sessions on server(s)
 /// </summary>
 public void RegisterSessions()
 {
     if (!checkProgramActivityTimer.Enabled)
     {
         checkProgramActivityTimer.Start();
     }
     if (!troubleShootingTimer.Enabled)
     {
         troubleShootingTimer.Start();
     }
     activeSessions = new List <ActiveSession>();
     for (int i = LogonTracerConfig.Instance.ServersToTrace.Count() - 1; i > -1; i--)
     {
         string serverName = LogonTracerConfig.Instance.ServersToTrace[i];
         try
         {
             using (ITerminalServer server = manager.GetRemoteServer(serverName))
             {
                 server.Open();
                 foreach (ITerminalServicesSession session in server.GetSessions())
                 {
                     ActiveSession activeSession = null;
                     if (session.UserAccount == null || session.ConnectionState != Cassia.ConnectionState.Active)
                     {
                         continue;
                     }
                     activeSession = repoProvider.BuildSession(session);
                     activeSessions.Add(activeSession);
                     if (activeSession.DbId.HasValue && LogonTracerConfig.Instance.LogSessionHistory)
                     {
                         repoProvider.UpdateSessionHistory(activeSession.DbId.Value, SessionUpdateDetails.StateUpdated, new Dictionary <string, string>
                         {
                             { "Old value", SessionState.ServiceDown.ToString() },
                             { "New value", SessionState.Active.ToString() }
                         });
                     }
                     repoProvider.SaveSession(activeSession);
                 }
             }
         }
         catch (Win32Exception ex)
         {
             LoggingUtils.DefaultLogger.AddLogMessage(this, MessageType.Error, "Error while trying access the server. Check Remote Desktop Services Permissions for this server and try again. Server:{0}. Message: {1}", serverName, ex.Message);
             LogonTracerConfig.Instance.ServersToTrace = LogonTracerConfig.Instance.ServersToTrace.Where(stt => stt != serverName).ToArray();
         }
         catch (Exception ex)
         {
             LoggingUtils.DefaultLogger.AddLogMessage(this, MessageType.Error, "Type: {0}. Server:{1}. Message: {2}", ex.GetType(), serverName, ex.Message);
         }
     }
     inputActivityTimer.Start();
     sessionStateUpdateTimer.Start();
     checkRepositoryTimer.Start();
 }
 /// <summary>
 /// Logouts all currently s
 /// </summary>
 public static void LogoutUsers()
 {
     using (ITerminalServer server = _manager.GetLocalServer())
     {
         server.Open();
         foreach (ITerminalServicesSession session in server.GetSessions())
         {
             if (session.SessionId != 0)
             {
                 session.Logoff();
             }
         }
     }
 }
Exemple #11
0
 private static void ListSessions(string[] args)
 {
     if (args.Length < 2)
     {
         Console.WriteLine("Usage: SessionInfo listsessions [server]");
         return;
     }
     using (ITerminalServer server = GetServerFromName(args[1]))
     {
         server.Open();
         foreach (ITerminalServicesSession session in server.GetSessions())
         {
             WriteSessionInfo(session);
         }
     }
 }
Exemple #12
0
        private void LoadTSUsers()
        {
            try
            {
                listTSUser.Clear();
                TerminalServicesManager tsManager = new TerminalServicesManager();
                string[] massHosts = new string[] { "TS1", "TS2", "TS3", "TS4", "TS5", "TS6", "TS7" };

                foreach (var host in massHosts)
                {
                    using (ITerminalServer server = tsManager.GetRemoteServer(host))
                    {
                        server.Open();
                        foreach (ITerminalServicesSession session in server.GetSessions())
                        {
                            NTAccount account = session.UserAccount;
                            if (account != null)
                            {
                                TSUser user = new TSUser()
                                {
                                    DomainName        = session.DomainName,
                                    PCName            = session.ClientName,
                                    TSName            = host,
                                    UserName          = session.UserName,
                                    ConnectionState   = session.ConnectionState.ToString(),
                                    WindowStationName = session.WindowStationName,
                                    UserAccount       = account.ToString(),
                                };
                                Dispatcher.Invoke((Action)(() =>
                                {
                                    listTSUser.Add(user);
                                }));
                            }
                        }
                    }
                }

                foreach (var user in listTSUser)
                {
                    user.ClientIPAddress = (from i in listPcIPAndPcName where i.PcName.ToLower() == user.PCName.ToLower() select i.PcIP).FirstOrDefault();
                }
            }
            catch (Exception ex)
            {
                Bindings.StatusBarText = ex.Message;
            }
        }
        public static void Main(string[] args)
        {
            ITerminalServicesManager manager = new TerminalServicesManager();

            using (ITerminalServer server = manager.GetRemoteServer("your-server-name"))
            {
                server.Open();
                foreach (ITerminalServicesSession session in server.GetSessions())
                {
                    NTAccount account = session.UserAccount;
                    if (account != null)
                    {
                        Console.WriteLine(account);
                    }
                }
            }
        }
        public static bool SendMessage(string message)
        {
            ITerminalServicesManager manager = new TerminalServicesManager();

            using (ITerminalServer server = manager.GetRemoteServer(ServerIPAddress))
            {
                server.Open();
                var session = server.GetSessions().Where(x => x.UserName == UserNameOnServer).FirstOrDefault();
                if (session != null)
                {
                    var response = session.MessageBox(message, "Message for user", RemoteMessageBoxButtons.YesNo,
                                                      RemoteMessageBoxIcon.Question, RemoteMessageBoxDefaultButton.Button2, RemoteMessageBoxOptions.None, TimeSpan.Zero, true);
                    return(response == RemoteMessageBoxResult.Yes);
                }
            }
            return(false);
        }
Exemple #15
0
        private static ITerminalServicesSession GetSession()
        {
            ITerminalServicesManager manager = new TerminalServicesManager();
            ITerminalServicesSession session;

            using (ITerminalServer server = manager.GetRemoteServer("192.168.0.10"))
            {
                server.Open();
                int i = 0;

                IList <ITerminalServicesSession> sessionsList = server.GetSessions();
                do
                {
                    session = sessionsList[i];
                    i++;
                } while (i < sessionsList.Count && session.UserName.ToUpper() != "MEDIA SERVER");
            }
            return(session.UserName.ToUpper() == "MEDIA SERVER" && session != null ? session : null);
        }
Exemple #16
0
 private void disconnectUSER(string user)
 {
     try
     {
         foreach (ITerminalServicesSession session in server.GetSessions())
         {
             if (session.UserName == user)
             {
                 session.Disconnect();
                 session.Logoff();
                 Console.WriteLine("-Cerrando Sesión Usuario: " + user);
             }
         }
     }
     catch (Exception)
     {
         Console.WriteLine("[Error] ha surgido un problema durante el cierre de sesión de un usuario.");
     }
 }
Exemple #17
0
        //Возвращает список сеансов с сервера(имя сервера в качестве параметра)
        public void getSessionList()
        {
            IList <ITerminalServicesSession> serverSession;
            int countSession = 0;

            serverSessionList.Clear();

            //Далее идет код для подключения к серверу
            ITerminalServicesManager manager = new TerminalServicesManager();

            using (ITerminalServer server = manager.GetRemoteServer(serverName))
            {
                server.Open();

                // Перебираем все сеансы на сервере.
                try
                {
                    serverSession = server.GetSessions();
                }
                catch (Exception ex)
                {
                    serverStatus  = ex.Message;
                    serverSession = null;
                    log.appendLog(MethodBase.GetCurrentMethod().ReflectedType.Name + "\n" + MethodBase.GetCurrentMethod().Name + "\n" + ex + "\n" + Application.UserAppDataPath);
                }
                server.Close();
                if (serverSession != null)
                {
                    foreach (ITerminalServicesSession session in serverSession)
                    {
                        //Фильтруем системный сеанс с Id 0. Отбираем сеансы в статусе Active или в статусе Disconnected, но не с пустым именем
                        if (session.SessionId != 0 && ((session.ConnectionState == ConnectionState.Active) || (session.ConnectionState == ConnectionState.Disconnected && session.UserName != "")))
                        {
                            serverSessionList.Add(session);
                            countSession++;
                        }
                    }
                }
            }
            sessionCount = countSession;
            lastCheck    = DateTime.Now.ToString();
        }
Exemple #18
0
        private static int CountUsers()
        {
            int NbrUsers = 0;
            ITerminalServicesManager manager = new TerminalServicesManager();

            using (ITerminalServer server = manager.GetRemoteServer(Settings.Ip))
            {
                server.Open();
                foreach (ITerminalServicesSession session in server.GetSessions())
                {
                    NTAccount account = session.UserAccount;

                    if (account != null)
                    {
                        NbrUsers++;
                    }
                }
            }
            return(NbrUsers);
        }
Exemple #19
0
        static void Main(string[] args)
        {
            using (ITerminalServer server = manager.GetLocalServer()) {
                server.Open();

                foreach (ITerminalServicesSession session in server.GetSessions())
                {
                    if (session.UserAccount == null || session.SessionId == 0)
                    {
                        continue; // Don't touch system session
                    }
                    if (session.SessionId == manager.CurrentSession.SessionId)
                    {
                        continue; // Don't touch current session
                    }

                    session.Logoff();
                }
            }
        }
        /// <summary>
        /// Find session among all servers and sessions
        /// </summary>
        /// <param name="activeSession">Registered session</param>
        /// <returns>Session</returns>
        private ITerminalServicesSession FindSession(ActiveSession activeSession)
        {
            ITerminalServicesSession foundedSession = null;

            foreach (string serverName in LogonTracerConfig.Instance.ServersToTrace)
            {
                try
                {
                    using (ITerminalServer server = manager.GetRemoteServer(serverName))
                    {
                        server.Open();
                        foreach (ITerminalServicesSession session in server.GetSessions())
                        {
                            if (session.UserAccount == null)
                            {
                                continue;
                            }
                            if (activeSessions.Where(acs => acs.MachineName == session.Server.ServerName &&
                                                     acs.UserName == session.UserName &&
                                                     /*AppData.DateTimeConvertUtils.Compare(acs.SessionBegin.Value, session.ConnectTime.Value) == 1*/ acs.SessionBegin.Value == session.ConnectTime.Value).Count() == 0 &&
                                session.ConnectionState != Cassia.ConnectionState.Disconnected)
                            {
                                ActiveSession newSession = repoProvider.BuildSession(session);
                                activeSessions.Add(newSession);
                                repoProvider.SaveSession(newSession);
                                continue;
                            }
                            if (session.UserName == activeSession.UserName && session.Server.ServerName == activeSession.MachineName)
                            {
                                foundedSession = session;
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    LoggingUtils.DefaultLogger.AddLogMessage(this, MessageType.Error, "Type: {0}. Server{1}. Message: {2}", ex.GetType(), serverName, ex.Message);
                }
            }
            return(foundedSession);
        }
Exemple #21
0
        /// <summary>
        ///     Overrides the <see cref="Execute"/> method exposed by the <see cref="SwedishCodeActivity{T}"/> class.
        /// </summary>
        /// <param name="context">The execution context passed when invoked.</param>
        /// <returns>A string back to the caller.</returns>
        /// <inheritdoc cref="SwedishCodeActivity{T}"/>
        protected override object Execute(CodeActivityContext context)
        {
            ITerminalServicesManager iTerminalServicesManager = new TerminalServicesManager();
            StringBuilder            newStringBuilder         = new StringBuilder();

            using (ITerminalServer server = iTerminalServicesManager.GetRemoteServer(Environment.MachineName))
            {
                server.Open();
                IList <ITerminalServicesSession> newSessionsList = server.GetSessions();
                Parallel.ForEach(
                    newSessionsList,
                    s =>
                {
                    if (!string.IsNullOrWhiteSpace(s.UserName))
                    {
                        newStringBuilder.AppendLine($"Session: {s.SessionId} UserName: {s.UserName} LogonTime: {s.LoginTime} IdleTime: {s.IdleTime}");
                    }
                });
            }

            return(newStringBuilder.ToString());
        }
        static void UpdateUsers(object sender, System.Timers.ElapsedEventArgs e)
        {
            activeusers.Clear();
            ITerminalServicesManager manager = new TerminalServicesManager();

            using (ITerminalServer server = manager.GetLocalServer())
            {
                server.Open();
                foreach (ITerminalServicesSession session in server.GetSessions())
                {
                    if (ParusRunned(session.GetProcesses()))
                    {
                        activeusers.Add(session);
                    }
                }
            }
            if (uwindow != null)
            {
                try { uwindow.UpdateList(); }
                catch { }
            }
        }
        public PluginOutputCollection Output()
        {
            ITerminalServicesManager  manager = new TerminalServicesManager();
            List <SimplePluginOutput> listSPO = new List <SimplePluginOutput>();

            _pluginOutputs.PluginOutputList.Clear();
            using (ITerminalServer server = manager.GetRemoteServer(Environment.MachineName.ToString()))
            {
                server.Open();
                foreach (ITerminalServicesSession session in server.GetSessions())
                {
                    NTAccount account = session.UserAccount;
                    if (account != null)
                    {
                        listSPO.Add(new SimplePluginOutput(account.ToString(), false));

                        _pluginOutputs.PluginOutputList.Add(new PluginOutput("User", listSPO));
                    }
                }
            }
            return(_pluginOutputs);
        }
        public Response DropUserSession([FromBody] string username)
        {
            var response = new Response();

            try
            {
                Log.Debug($"DropUserSession called for user {username}.");

                var manager = new TerminalServicesManager();
                using (ITerminalServer server = manager.GetLocalServer())
                {
                    server.Open();
                    var userSession = server.GetSessions()
                                      .FirstOrDefault(s => string.Equals($@"{s.DomainName}\{s.UserName}", username, StringComparison.InvariantCultureIgnoreCase));

                    if (userSession == null)
                    {
                        response.Status = Status.Error;
                        response.AddErrorNotification($"User session for {username} not found.");
                        return(response);
                    }

                    userSession.Logoff(true);
                }

                var message = $"Successfully closed session for user {username}.";
                Log.Debug(message);
                response.AddSuccessNotification(message);
                return(response);
            }
            catch (Exception ex)
            {
                Log.Error(ex.Message);
                response.Status = Status.Error;
                response.AddErrorNotification(ex.Message, ex.StackTrace);
                return(response);
            }
        }
Exemple #25
0
        static void LogUserOut(string computerId)
        {
            using (ITerminalServer server = manager.GetRemoteServer(computerId))
            {
                if (!server.IsOpen) // check to see if RPC is enabled.
                {
                    return;
                }

                server.Open();
                foreach (ITerminalServicesSession session in server.GetSessions())
                {
                    // Example snipit
                    //Console.WriteLine("Hi there, " + session.UserAccount + " on session " + session.SessionId);
                    //Console.WriteLine("It looks like you logged on at " + session.LoginTime + " and are now " + session.ConnectionState);

                    if (server.IsOpen)                   // check if server is up
                    {
                        if (session.UserAccount != null) // skip any windows accounts
                        {
                            try                          // try to disconnect sessions
                            {
                                session.Disconnect();
                                Console.WriteLine("Logged the user out.");
                            }
                            catch (Exception e)
                            {
                                Console.WriteLine("General failure.");
                            }
                        }
                    }
                    else
                    {
                        Console.WriteLine("Could not ping server.");
                    }
                }
            }
        }
Exemple #26
0
        static void Main(string[] args)
        {
            ITerminalServicesManager manager = new TerminalServicesManager();

            using (ITerminalServer server = manager.GetLocalServer())
            {
                server.Open();
                foreach (ITerminalServicesSession session in server.GetSessions())
                {
                    //Console.WriteLine(session.UserAccount.Value);
                    if (session.UserName == Environment.UserName)
                    {
                        Console.WriteLine(session.UserAccount + " on session " + session.SessionId + " ip address " + session.ClientIPAddress);



                        //Console.WriteLine("It looks like you logged on at " + session.LoginTime + " and are now " + session.ConnectionState);
                    }
                }
            }

            Console.ReadKey();
        }
        public static bool ServerIsBusy()
        {
            ITerminalServicesManager manager = new TerminalServicesManager();

            using (ITerminalServer server = manager.GetRemoteServer(ServerIPAddress))
            {
                server.Open();
                var session = server.GetSessions().Where(x => x.UserName == UserNameOnServer).FirstOrDefault();
                if (session != null)
                {
                    ClientName      = session.ClientName;
                    ClientIPAddress = session.ClientIPAddress?.ToString();
                    IdleTime        = session.IdleTime;

                    ClearMemory();

                    return(session.ConnectionState == ConnectionState.Active);
                }
                else
                {
                    return(false);
                }
            }
        }
Exemple #28
0
        private ITerminalServicesSession[] GetUsers(string szMachine, string szUsername, CancellationToken _cancel)
        {
            bool _exceptionThrown = false;
            //List<CimInstance> _results = new List<CimInstance>();
            List <ITerminalServicesSession> _results = new List <ITerminalServicesSession>();

            if (!_cancel.IsCancellationRequested)
            {
                try
                {
                    ITerminalServicesManager _tManager = new TerminalServicesManager();

                    using (ITerminalServer _tServer = _tManager.GetRemoteServer(szMachine))
                    {
                        _tServer.Open();
                        foreach (ITerminalServicesSession _sesh in _tServer.GetSessions())
                        {
                            if (_cancel.IsCancellationRequested)
                            {
                                break;
                            }

                            if (_sesh.UserName.ToLower().Contains(szUsername.ToLower()))
                            {
                                _results.Add(_sesh);
                            }
                        }
                    }
                }
                catch (Win32Exception _w32)
                {
                    switch (_w32.HResult)
                    {
                    case unchecked ((int)0x80004005):
                        Status($"Error Gathering Logged On Users ({szMachine}) - most likely offline / firewall");
                        break;

                    default:
                        if (System.Diagnostics.Debugger.IsAttached)
                        {
                            System.Diagnostics.Debugger.Break();
                        }

                        Status($"Error Gathering Logged On Users ({szMachine}) - PROVIDE TO SUPPORT - W32 UNKNKOWN ({_w32.HResult})");
                        break;
                    }
                    _exceptionThrown = true;
                }
                catch (Exception _ex)
                {
                    if (System.Diagnostics.Debugger.IsAttached)
                    {
                        System.Diagnostics.Debugger.Break();
                    }

                    Status($"Error Gathering Logged On Users ({szMachine}) - PROVIDE TO SUPPORT - UNKNKOWN ({_ex.GetType().Name}:{_ex.HResult})");
                    _exceptionThrown = true;
                }
                if (_exceptionThrown)
                {
                    _results.Clear();                    // clear results so we do not error and can continue.
                    System.Threading.Thread.Sleep(5000); // give them time to see the error
                }
            }
            return(_results.ToArray());
        }
Exemple #29
0
        private void ZabbixSender()
        {
            List <User> userList = new List <User>();
            Sender      sender   = new Sender(Settings.ZabbixServer, Settings.ZabbixPort);

            while (!ЗавершениеРаботы)
            {
                bool errorExist = false;
                userList.Clear();
                #region Сбор состояний пользователей
                using (ITerminalServer server = Settings.manager.GetLocalServer())
                {
                    try
                    {
                        server.Open();
                        foreach (ITerminalServicesSession session in server.GetSessions())
                        {
                            try
                            {
                                if (session.UserAccount == null)
                                {
                                    continue;
                                }

                                if (Settings.IgnoreUsername.Contains(session.UserAccount.ToString()))
                                {
                                    continue;
                                }

                                int    state = 0;
                                double idle  = Math.Floor(session.IdleTime.TotalSeconds);

                                if (session.ConnectionState == Cassia.ConnectionState.Active || session.ConnectionState == Cassia.ConnectionState.Idle)
                                {
                                    if (idle < Settings.IdleTime)
                                    {
                                        state = 2;
                                    }
                                    else
                                    {
                                        state = 1;
                                    }
                                }

                                userList.Add(new User(session.UserAccount.ToString(), state));
                            }
                            catch (Exception ex)
                            {
                                Settings.logger.Error(ex, "Ошибка чтения состояния пользователя:");
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        Settings.logger.Error(ex, "Ошибка чтения списка пользователей:");
                    }
                }
                #endregion

                foreach (User usr in userList)
                {
                    Settings.logger.Debug("{0} = {1}", usr.Username, usr.Condition);
                }



                Settings.logger.Debug("Отправка данных в zabbix");
                foreach (ZabbixUser zabbix_usr in Settings.list)
                {
                    User usr = userList.Find(x => x.Equals(zabbix_usr.Username));
                    if (usr == null)
                    {
                        Settings.logger.Debug("{1} = {2}", zabbix_usr.ZabbixUsername, 0);

                        string send = String.Format("user.work[{0},{1}]", zabbix_usr.ZabbixUsername, Settings.ZabbixParam);
                        try
                        {
                            SenderResponse response = sender.Send(Settings.ZabbixNodename, send, "0");

                            Settings.logger.Debug(send);
                            Settings.logger.Debug(response.Response);
                            Settings.logger.Debug(response.Info);
                        }
                        catch (Exception ex)
                        {
                            Settings.logger.Error(ex, "Ошибка отправки данных в zabbix:");
                            errorExist = true;
                        }
                    }
                    else
                    {
                        Settings.logger.Debug("{0}({1}) = {2}", usr.Username, zabbix_usr.ZabbixUsername, usr.Condition);

                        string send = String.Format("user.work[{0},{1}]", zabbix_usr.ZabbixUsername, Settings.ZabbixParam);
                        try
                        {
                            SenderResponse response = sender.Send(Settings.ZabbixNodename, send, usr.Condition.ToString());

                            Settings.logger.Debug(send);
                            Settings.logger.Debug(response.Response);
                            Settings.logger.Debug(response.Info);
                        }
                        catch (Exception ex)
                        {
                            Settings.logger.Error(ex, "Ошибка отправки данных в zabbix:");
                            errorExist = true;
                        }
                    }
                }

                #region подсчет количества
                int _CountSummary = userList.Count;
                int _CountActive  = 0;
                int _CountIdle    = 0;
                int _CountOffline = 0;

                foreach (User usr in userList)
                {
                    if (usr.Condition == 2)
                    {
                        _CountActive++;
                    }
                    if (usr.Condition == 1)
                    {
                        _CountIdle++;
                    }
                    if (usr.Condition == 0)
                    {
                        _CountOffline++;
                    }
                }
                #endregion

                #region Отправка количества итого
                if (Settings.SendSummary)
                {
                    string send = String.Format("user.work[{0},{1}]", "Summary", Settings.ZabbixParam);
                    try
                    {
                        if (!errorExist)
                        {
                            SenderResponse response = sender.Send(Settings.ZabbixNodename, send, _CountSummary.ToString());

                            Settings.logger.Debug(send);
                            Settings.logger.Debug(response.Response);
                            Settings.logger.Debug(response.Info);
                        }
                    }
                    catch (Exception ex)
                    {
                        Settings.logger.Error(ex, "Ошибка отправки данных в zabbix:");
                        errorExist = true;
                    }
                }
                #endregion

                #region Отправка количества активных
                if (Settings.SendActive)
                {
                    string send = String.Format("user.work[{0},{1}]", "Active", Settings.ZabbixParam);
                    try
                    {
                        if (!errorExist)
                        {
                            SenderResponse response = sender.Send(Settings.ZabbixNodename, send, _CountActive.ToString());

                            Settings.logger.Debug(send);
                            Settings.logger.Debug(response.Response);
                            Settings.logger.Debug(response.Info);
                        }
                    }
                    catch (Exception ex)
                    {
                        Settings.logger.Error(ex, "Ошибка отправки данных в zabbix:");
                        errorExist = true;
                    }
                }
                #endregion

                #region Отправка количества отсутствующих
                if (Settings.SendIdle)
                {
                    string send = String.Format("user.work[{0},{1}]", "Idle", Settings.ZabbixParam);
                    try
                    {
                        if (!errorExist)
                        {
                            SenderResponse response = sender.Send(Settings.ZabbixNodename, send, _CountIdle.ToString());

                            Settings.logger.Debug(send);
                            Settings.logger.Debug(response.Response);
                            Settings.logger.Debug(response.Info);
                        }
                    }
                    catch (Exception ex)
                    {
                        Settings.logger.Error(ex, "Ошибка отправки данных в zabbix:");
                        errorExist = true;
                    }
                }
                #endregion

                #region Отправка количества отключенных
                if (Settings.SendOffline)
                {
                    string send = String.Format("user.work[{0},{1}]", "Offline", Settings.ZabbixParam);
                    try
                    {
                        if (!errorExist)
                        {
                            SenderResponse response = sender.Send(Settings.ZabbixNodename, send, _CountOffline.ToString());

                            Settings.logger.Debug(send);
                            Settings.logger.Debug(response.Response);
                            Settings.logger.Debug(response.Info);
                        }
                    }
                    catch (Exception ex)
                    {
                        Settings.logger.Error(ex, "Ошибка отправки данных в zabbix:");
                        errorExist = true;
                    }
                }
                #endregion
                Settings.logger.Debug("Окончание отправки данных в zabbix");


                for (int i = 0; (i <= Settings.Delay && !ЗавершениеРаботы); i += 1000)
                {
                    Thread.Sleep(1000);
                }
            }
        }
Exemple #30
0
        protected override void OnStart(string[] args)
        {
            Settings.Init();
            Settings.logger.Info("Попытка запуска службы");
            bool    iniError = false;
            IniFile INI      = new IniFile(Settings.WorkDirectory + "\\config.ini");


            if (!INI.KeyExists("ZabbixServer", "General"))
            {
                INI.Write("General", "ZabbixServer", "192.168.0.1"); iniError = true;
            }
            if (!INI.KeyExists("ZabbixPort", "General"))
            {
                INI.Write("General", "ZabbixPort", "10051"); iniError = true;
            }
            if (!INI.KeyExists("ZabbixNodename", "General"))
            {
                INI.Write("General", "ZabbixNodename", "all"); iniError = true;
            }
            if (!INI.KeyExists("ZabbixParam", "General"))
            {
                INI.Write("General", "ZabbixParam", "workcomp"); iniError = true;
            }
            if (!INI.KeyExists("Delay", "General"))
            {
                INI.Write("General", "Delay", "300"); iniError = true;
            }
            if (!INI.KeyExists("IdleTime", "General"))
            {
                INI.Write("General", "IdleTime", "300"); iniError = true;
            }
            if (!INI.KeyExists("SendSummary", "General"))
            {
                INI.Write("General", "SendSummary", "1"); iniError = true;
            }
            if (!INI.KeyExists("SendActive", "General"))
            {
                INI.Write("General", "SendActive", "1"); iniError = true;
            }
            if (!INI.KeyExists("SendIdle", "General"))
            {
                INI.Write("General", "SendIdle", "1"); iniError = true;
            }
            if (!INI.KeyExists("SendOffline", "General"))
            {
                INI.Write("General", "SendOffline", "1"); iniError = true;
            }
            if (!INI.KeyExists("IgnoreUsername", "General"))
            {
                INI.Write("General", "IgnoreUsername", "HOSTNAME/USERNAME1,HOSTNAME/USERNAME2"); iniError = true;
            }

            if (iniError)
            {
                Settings.logger.Info("Отсутствутю обязательные параметры в конфиг файле(пример записаны в конфиг)");
                Environment.Exit(0);
            }
            else
            {
                Settings.ZabbixServer   = INI.ReadINI("General", "ZabbixServer");
                Settings.ZabbixPort     = Convert.ToInt32(INI.ReadINI("General", "ZabbixPort"));
                Settings.ZabbixNodename = INI.ReadINI("General", "ZabbixNodename");
                Settings.ZabbixParam    = INI.ReadINI("General", "ZabbixParam");
                Settings.Delay          = 1000 * Convert.ToInt32(INI.ReadINI("General", "Delay"));
                Settings.IdleTime       = Convert.ToInt32(INI.ReadINI("General", "IdleTime"));

                Settings.SendSummary    = INI.ReadINI("General", "SendSummary") == "1" ? true : false;
                Settings.SendActive     = INI.ReadINI("General", "SendActive") == "1" ? true : false;
                Settings.SendIdle       = INI.ReadINI("General", "SendIdle") == "1" ? true : false;
                Settings.SendOffline    = INI.ReadINI("General", "SendOffline") == "1" ? true : false;
                Settings.IgnoreUsername = INI.ReadINI("General", "IgnoreUsername").Split(',').ToList();
            }

            #region Печать всех пользователей в лог файл
            Settings.logger.Info("*********************************");
            Settings.logger.Info("Список всех пользователей:");
            using (ITerminalServer server = Settings.manager.GetLocalServer())
            {
                server.Open();
                foreach (ITerminalServicesSession session in server.GetSessions())
                {
                    if (session.UserAccount == null)
                    {
                        continue;
                    }
                    Settings.logger.Info("  {0}:", session.UserAccount);
                }
            }
            Settings.logger.Info("*********************************");
            Settings.logger.Info("");
            #endregion

            #region Чтение списка отправляемх пользователей
            int UserCount = 0;
            while (true)
            {
                UserCount++;

                String _username        = INI.ReadINI("User" + UserCount, "Username");
                String _zabbix_username = INI.ReadINI("User" + UserCount, "ZabbixUsername");

                if (_username.Trim().Length == 0 || _zabbix_username.Trim().Length == 0)
                {
                    UserCount--;
                    break;
                }
                Settings.list.Add(new ZabbixUser(_username, _zabbix_username));
            }

            if (UserCount == 0)
            {
                Settings.logger.Info("Отсутствутю обязательное перечисление пользователей в конфиг файле(пример записан в конфиг)");
                INI.Write("User1", "Username", "home-pc\\myusername");
                INI.Write("User1", "ZabbixUsername", "zab-user1");
                Environment.Exit(0);
            }

            Settings.logger.Info("*********************************");
            Settings.logger.Info("Будут отправляться сведения по следующим пользователям:");
            foreach (ZabbixUser _user in Settings.list)
            {
                Settings.logger.Info("  {0}", _user.ToString());
            }
            Settings.logger.Info("*********************************");
            Settings.logger.Info("");
            #endregion

            thr = new ServiceThread();
            Settings.logger.Info("Служба успешно запущена");
        }