在C#中获取本地Windows用户登录会话时间戳

时间:2009-03-25 16:24:18

标签: c# .net windows login timestamp

我一直在尝试查看各种.NET类库,以便我可以获取本地计算机的登录用户,无论是否连接到域。 到目前为止

System.Security.Principal.WindowsPrincipal LoggedUser = System.Threading.Thread.CurrentPrincipal as 
System.Security.Principal.WindowsPrincipal;
// This returns the username
LoggedUser.Identity.Name

这将返回用户的名称,但是有没有办法获取会话详细信息,您将在AD或用户登录中看到的内容,会话持续时间等等。用户的上下文,工作站等操作已锁定,用户的存在基本。

如果您有任何想法,我们将不胜感激。 提前谢谢。

2 个答案:

答案 0 :(得分:2)

您可以使用System.DirectoryServices命名空间通过LDAP查询查询Active Directory以获取所需的大部分数据。例如,下面的示例显示了用户的上次登录时间。

当然,这仅适用于域用户。

using System;
using System.Collections.Generic;
using System.Text;
using System.DirectoryServices;

namespace ADMadness
{
    class Program
    {
        static void Main(string[] args)
        {
            DirectorySearcher search = new DirectorySearcher("LDAP://DC=my,DC=domain,DC=com");
            search.Filter = "(SAMAccountName=MyAccount)";
            search.PropertiesToLoad.Add("lastLogonTimeStamp");


            SearchResult searchResult = search.FindOne();


            long lastLogonTimeStamp = long.Parse(searchResult.Properties["lastLogonTimeStamp"][0].ToString());
            DateTime lastLogon = DateTime.FromFileTime(lastLogonTimeStamp);


            Console.WriteLine("The user last logged on at {0}.", lastLogon);
            Console.ReadLine();
        }
    }
}

答案 1 :(得分:1)

您可以从WMI查看WMI_LogonSession

等一些内容,例如开始时间