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; }
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"; } }
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; }
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; } }