使用Active Directory的组上允许的登录时间

时间:2011-10-12 19:33:31

标签: c# templates active-directory group-policy gpo

我长时间搜索如何在组上定义允许的登录时间,就像可以从Active Directory中的帐户选项卡中对用户进行操作一样。

我已经在c#中有一个类,可以通过帮助'logonhours'属性查询返回用户所有允许小时数的列表。

  public byte[] GetLogonHours(string userName, string password, string path)
  {
     DirectoryEntry entry = this.GetUserAccount(userName, path);

     return (byte[])entry.Properties["logonHours"].Value;
  }

  public DirectoryEntry GetUserAccount(string username, string path)
  {
     using (DirectoryEntry objRootEntry = new DirectoryEntry(path))
     {
        using (DirectorySearcher objAdSearcher = new DirectorySearcher(objRootEntry))
        {
           objAdSearcher.Filter = "(&(objectClass=user)(samAccountName=" + username + "))";

           SearchResult objResult = objAdSearcher.FindOne();

           if (objResult != null)
           {
              return objResult.GetDirectoryEntry();
           }
        }
     }

     return null;
  }

我使用这篇文章帮助我了解如何查询登录时间:

http://anlai.wordpress.com/2010/09/07/active-directory-permitted-logon-times-with-c-net-3-5-using-system-directoryservices-accountmanagement/

重要的是要了解我不希望功能知道用户上次登录的时间。我所拥有的是一种阻止用户在某些时刻登录的功能。

我想要的是一个可以为一组用户应用登录时间的功能,我可以使用c#查询Active Directory以获取这些登录时间信息。

非常感谢。

2 个答案:

答案 0 :(得分:1)

在我的理解中,登录时间信息是用户信息。正如@Knite所指出的HOW TO: Limit User Logon Time in a Domain in Windows Server 2003所述,你可以改变它:

  1. 用户的用户,无论您是否在用户列表上循环
  2. 将GPO应用于organizationalUnit用户属于
  3. 在您的情况下,您可以循环播放组中的所有成员并更改其登录时间。

答案 1 :(得分:0)

根据http://support.microsoft.com/kb/816666,您应该生成一个组中的用户列表,并将他们的登录时间写入CSV文件。