Search code examples
wmiterminal-services

How can I query teminal services activity remotely?


I want to query our servers to see look for disconnected/idle sessions. I know I can use 'query.exe', but I'd prefer something that's easier to work with from code.

WMI would be my preference.

Thanks.


Solution

  • If you are using a .NET language, you might try Cassia. In C#, the code would be:

    using System;
    using Cassia;
    
    namespace CassiaSample
    {
        public static class Program
        {
            public static void Main(string[] args)
            {
                ITerminalServicesManager manager = new TerminalServicesManager();
                using (ITerminalServer server = manager.GetRemoteServer("server-name"))
                {
                    server.Open();
                    foreach (ITerminalServicesSession session in server.GetSessions())
                    {
                        if ((session.ConnectionState == ConnectionState.Disconnected)
                            ||
                            (session.ConnectionState == ConnectionState.Active)
                            && (session.IdleTime > TimeSpan.FromMinutes(1)))
                        {
                            Console.WriteLine("Session {0} (User {1})", session.SessionId, session.UserName);
                        }
                    }
                }
            }
        }
    }
    

    EDIT: Updated sample code for Cassia 2.0.