public void RegisterUserSessions()
 {
     using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["UserSessionsDB"].ToString()))
     {
         connection.Open();
         foreach (string clientPrefix in GetClientPrefixes())
         {
             int sessionCount = 0;
             ITerminalServicesManager manager = new TerminalServicesManager();
             foreach (string ServerName in ConfigurationManager.AppSettings["RDPServers"].Split(','))
             {
                 ITerminalServer server = manager.GetRemoteServer(ServerName);
                 server.Open();
                 foreach (ITerminalServicesSession session in server.GetSessions())
                 {
                     if (session.UserName != "" && session.UserName.Substring(0, 3) == clientPrefix)
                     {
                         sessionCount++;
                     }
                 }
                 server.Close();
             }
             SqlCommand command = new SqlCommand("INSERT INTO [dbo].[" + clientPrefix + "] ([DateTime], [SessionCount]) VALUES(GETDATE(), " + sessionCount + ")", connection);
             command.ExecuteNonQuery();
         }
     }
 }
 public IEnumerable<OnlineUser> List()
 {
     try
     {
         string ClientPrefix = GetClientPrefix();
         ITerminalServicesManager manager = new TerminalServicesManager();
         List<OnlineUser> sessions = new List<OnlineUser>();
         foreach (string ServerName in ConfigurationManager.AppSettings["RDPServers"].Split(','))
         {
             ITerminalServer server = manager.GetRemoteServer(ServerName);
             server.Open();
             foreach (ITerminalServicesSession session in server.GetSessions())
             {
                 if (session.UserName != "" && session.UserName.Substring(0, 3) == ClientPrefix)
                 {
                     OnlineUser onlineUser = new OnlineUser();
                     onlineUser.SessionId = session.SessionId;
                     onlineUser.UserName = session.UserName;
                     onlineUser.ServerName = session.Server.ServerName;
                     onlineUser.ClientName = session.ClientName;
                     onlineUser.ConnectionState = session.ConnectionState.ToString();
                     sessions.Add(onlineUser);
                 }
             }
             server.Close();
         }
         sessions.Sort((x, y) => string.Compare(x.UserName, y.UserName));
         return sessions;
     }
     catch (Exception Error)
     {
         throw Error;
     }
 }
        public OnlineUser Find(int SessionId, string ServerName)
        {
            ITerminalServicesManager Manager = new TerminalServicesManager();
            ITerminalServer Server = Manager.GetRemoteServer(ServerName);
            Server.Open();
            ITerminalServicesSession Session = Server.GetSession(SessionId);

            OnlineUser onlineUser = new OnlineUser();
            onlineUser.SessionId = Session.SessionId;
            onlineUser.UserName = Session.UserName;
            onlineUser.ServerName = Session.Server.ServerName;
            onlineUser.ClientName = Session.ClientName;
            onlineUser.ConnectionState = Session.ConnectionState.ToString();

            return onlineUser;
        }
示例#4
0
        private void _LoadUsersFromServers()
        {
            if( _Settings == null || _Settings.Servers.Length <= 0 ) return;
            var TSManager = new TerminalServicesManager();

            // Foreach server in the collection, find active sessions
            try
            {
                int pos = 0;
                foreach( var Server in _Settings.Servers )
                {
                    using( var thisServer = TSManager.GetRemoteServer(Server) )
                    {
                        thisServer.Open();
                        foreach( var tSession in thisServer.GetSessions() )
                        {
                            if( tSession.UserName.Length <= 0 ) continue; // Dont want ghost entries

                            string StatusText = ( tSession.ConnectionState == ConnectionState.Idle ) ? " IDLE" : ( (tSession.ConnectionState == ConnectionState.Disconnected) ? " DISCONNECTED" : "");
                            var Data = new KeyValuePair<int, String>(tSession.SessionId, string.Format("{0} ({1}){2}", tSession.UserAccount, Server, StatusText));

                            _ServerMap.Add(pos, Server);
                            _DataSource.Add(Data);
                            pos++;
                        }
                    }
                }
            }
            catch( Exception Ex )
            {
                MessageBox.Show("An error occoured loading user information:\n"+Ex.Message, "Application Exception", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            // Apply DataSource to Form
            UserBox.SelectedIndex = -1;
            if( _DataSource.Count >= 1 )
            {
                UserBox.DataSource = _DataSource;
                UserBox.DisplayMember = "Value";
                UserBox.ValueMember = "Key";
            }
        }
示例#5
0
        private void _LogoutButton_Click(object sender, EventArgs e)
        {
            // Logout User
            var SelectedIndex = int.Parse(UserBox.SelectedValue.ToString().Trim());
            if( SelectedIndex <= 0 ) return;

            var SelectedPair = (KeyValuePair<int,string>)UserBox.SelectedItem;
            string Message = string.Format("Are you sure you wish to logoff the following session:\n{0}", SelectedPair.Value);
            if( MessageBox.Show(Message, "Confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes )
            {
                // Logout User
                var TSManager = new TerminalServicesManager();
                using( var thisServer = TSManager.GetRemoteServer(_FindServerForUser(SelectedPair)) )
                {
                    thisServer.Open();
                    thisServer.GetSession(SelectedIndex).Logoff();
                }
            }
        }
        /// <summary>
        /// Gets the username of the currently logged on user after stripping the domain.
        /// </summary>
        /// <returns>The currently logged on user after stripping the domain.</returns>
        /// <remarks>
        /// This will iterate over all sessions to find the first (non-empty) user that
        /// is either being logged in or already logged in. 
        /// </remarks>
        public static string GetUsername()
        {
            // The detected user can be overwritten
            string username = Config.GetUsername();
            if (!string.IsNullOrEmpty(username))
            {
                return username;
            }

            ITerminalServicesManager manager = new TerminalServicesManager();
            using (ITerminalServer server = manager.GetLocalServer())
            {
                server.Open();
                foreach (ITerminalServicesSession session in server.GetSessions())
                {
                    if (!string.IsNullOrEmpty(session.UserName) && (session.ConnectionState == ConnectionState.Initializing || session.ConnectionState == ConnectionState.Active))
                    {
                        return session.UserName;
                    }
                }
            }

            return string.Empty;
        }
示例#7
0
 public List<clsRDPModel> getSessionListOnLocalhost(string[] accountExceptions=null)
 {
     List<clsRDPModel> result = new List<clsRDPModel>();
     ITerminalServicesManager manager = new TerminalServicesManager();
     using (ITerminalServer server = manager.GetLocalServer())
     {
         IList<ITerminalServicesSession> sessions;
         sessions = server.GetSessions();
         server.Open();
         foreach (ITerminalServicesSession session in sessions)
         {
             NTAccount account = session.UserAccount;
             if (account != null)
             {
                 if(!getAccountIsException(accountExceptions, account.ToString()))
                 {
                     result.Add(new clsRDPModel(
                         session.ConnectionState.ToString(),
                         session.DomainName,
                         session.UserName,
                         (session.ClientIPAddress!=null? session.ClientIPAddress.ToString():""),
                         session.ConnectTime,
                         (session.ConnectionState==ConnectionState.Active? null : session.DisconnectTime),
                         session.SessionId));
                 }
             }
         }
     }
     return result;
 }
 public void Logoff(OnlineUser onlineUser)
 {
     try
     {
         if (onlineUser.UserName.Substring(0,3) != GetClientPrefix())
         {
             throw new Exception("You do not have permission to Logoff session " + onlineUser.SessionId);
         }
         ITerminalServicesManager Manager = new TerminalServicesManager();
         ITerminalServer Server = Manager.GetRemoteServer(onlineUser.ServerName);
         Server.Open();
         ITerminalServicesSession Session = Server.GetSession(onlineUser.SessionId);
         Session.Logoff();
     }
     catch (Exception Error)
     {
         throw Error;
     }
 }