public static 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(); } } }
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; } }