title: how to get logged on users with their status on remote machine
body: <p>I'm looking for a way to get the users that are logged in on a remote machine. I would love to know if they are logged on localy or remotely, but most of all I MUST know their status.
  I saw some answers on the net that are written in VB, but I need it in c#.
  the solution given in <a href="http://www.tek-tips.com/viewthread.cfm?qid=1308179" rel="noreferrer">markdmak answer here</a> is looking like a good start, but it's in VB and it looks for remote sessions only.
  I have this piece of code, which can be a start, but I would like to couple the LogonId to a username and to see its status:</p>
  
  <pre><code>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 &amp;&amp; os.GetPropertyValue("LogonId").ToString() != "")
          {
              returnVal = true;
          }
      }
      catch (NullReferenceException)
      {
          continue;
      }
  }
  return returnVal;
  }
  </code></pre>
  
  <p>What I really need and can't find, is a way of getting ALL users on a remote machine AND their status, meaning: Active, Disconnected, Logged-off, etc.</p>