Cómo iniciar sesión en los usuarios con su estado en la máquina remota

Estoy buscando una manera de obtener los usuarios que han iniciado sesión en una máquina remota. Me encantaría saber si han iniciado sesión localmente o de forma remota, pero sobre todo DEBE conocer su estado. Vi algunas respuestas en la red que están escritas en VB, pero las necesito en c #. la solución dada enmarkdmak responde aquí parece un buen comienzo, pero está en VB y solo busca sesiones remotas. Tengo este código, que puede ser un comienzo, pero me gustaría unir el LogonId a un nombre de usuario y ver su estado:

string fqdn = ""; // set!!!    
ConnectionOptions options = new ConnectionOptions();
options.EnablePrivileges = true;
// To connect to the remote computer using a different account, specify these values:
// these are needed in dev environment
options.Username = ConfigurationManager.AppSettings["KerberosImpersonationUser"];
options.Password = ConfigurationManager.AppSettings["KerberosImpersonationPassword"];
options.Authority = "ntlmdomain:" + ConfigurationManager.AppSettings["KerberosImpersonationDomain"];

ManagementScope scope = new ManagementScope("\\\\" + fqdn + "\\root\\CIMV2", options);
try
{
    scope.Connect();
}
catch (Exception ex)
{
    if (ex.Message.StartsWith("The RPC server is unavailable"))
    {
        // The Remote Procedure Call server is unavailable
        // cannot check for logged on users
        return false;
    }
    else
    {
        throw ex;
    }
}

SelectQuery query = new SelectQuery("Select * from Win32_LogonSession");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
ManagementObjectCollection results = searcher.Get();
bool returnVal = false;
foreach (ManagementObject os in results)
{
    try
    {
        if (os.GetPropertyValue("LogonId").ToString() != null && os.GetPropertyValue("LogonId").ToString() != "")
        {
            returnVal = true;
        }
    }
    catch (NullReferenceException)
    {
        continue;
    }
}
return returnVal;
}

Lo que realmente necesito y no puedo encontrar es una forma de que TODOS los usuarios se encuentren en una máquina remota Y su estado, es decir, activo, desconectado, desconectado, etc.

Respuestas a la pregunta(2)

Su respuesta a la pregunta