获取 Active Directory 组的成员并检查他们是活跃的还是不活跃的
Get members of Active Directory Group and check if they are active or inactive
我正在尝试在 AD 中搜索用户并仅在他们不活动时将其显示在列表框中。
这是我写的代码
private void button1_Click(object sender, EventArgs e)
{
PrincipalContext insPrincipalContext = new PrincipalContext(ContextType.Domain, "DX", "DC=RX,DC=PX,DC=com");
ListUser(insPrincipalContext);
}
private void ListUser(PrincipalContext insPrincipalContext)
{
UserPrincipal insUserPrincipal = new UserPrincipal(insPrincipalContext);
insUserPrincipal.Name = "*";
SearchUsers(insUserPrincipal);
}
private void SearchUsers(UserPrincipal parUserPrincipal)
{
listBox1.Items.Clear();
PrincipalSearcher insPrincipalSearcher = new PrincipalSearcher();
insPrincipalSearcher.QueryFilter = parUserPrincipal;
PrincipalSearchResult<Principal> results = insPrincipalSearcher.FindAll();
foreach (Principal p in results)
{
UserPrincipal theUser = p as UserPrincipal;
if (theUser != null)
{
if (***theUser.IsAccountLockedOut()***)//**Is this same as Active or Inactive?**
{
listBox1.Items.Add(p);
}
else
{
}
}
}
}
所以我的问题是 (theUser.)IsAccountLockedUp 是否与询问用户是否处于非活动状态相同?
我知道有人可能会建议这个问题是 Get members of Active Directory Group and check if they are enabled or disabled 的副本,但这里的问题是我没有测试用户可以测试,我只是从 C# 开始。
谢谢
IsAccountLockedOut
对应于 Active Directory 帐户属性中的 "Account is locked out"。这意味着帐户由于尝试输入错误密码的次数过多而被锁定。
属性中还有另一个设置"Account is disabled"。如果相应的人离开公司,管理员(大型企业环境中的身份管理系统)通常使用它来禁用帐户。所以该帐户不能再使用了,但它仍然存在并用于 SID 查找(将在组或 ACL 中显示为名称)。
问问自己你的意图是什么。 "inactive" 是什么意思?
您或许可以以此为起点:
if (theUser != null)
{
if (theUser.IsAccountLockedOut())
{
// account locked out
}
// Enabled is nullable bool
if (!(theUser.Enabled == true))
{
// account disabled
}
if (theUser.LastLogon == null ||
theUser.LastLogon < DateTime.Now - TimeSpan.FromDays(150))
{
// never logged on or last logged on long time ago
// see below in the text for important notes !
}
}
检查 LastLogon 可用于查找孤立帐户。但请注意,女性可能正在休产假:-)
重要
在 Active Directory 中,有两个相似的属性:
- 上次登录
- 上次登录时间戳
见
为了区别。简而言之:只有 LastLogonTimeStamp 属性在域控制器之间复制,并且可以安全地用于检查孤立帐户。但即使是 LastLogonTimeStamp 也不是很准确,但足以检测 "old" / 未使用的帐户。
我还没有检查UserPrinciple.LastLogon
对应的是哪一个。小心。
我正在编写自己的 AD 搜索库,它基于 System.DirectoryServices 类。这有一些好处:更好的控制和更好的性能。如果准备好了,我可能会做到 public.
我正在尝试在 AD 中搜索用户并仅在他们不活动时将其显示在列表框中。 这是我写的代码
private void button1_Click(object sender, EventArgs e)
{
PrincipalContext insPrincipalContext = new PrincipalContext(ContextType.Domain, "DX", "DC=RX,DC=PX,DC=com");
ListUser(insPrincipalContext);
}
private void ListUser(PrincipalContext insPrincipalContext)
{
UserPrincipal insUserPrincipal = new UserPrincipal(insPrincipalContext);
insUserPrincipal.Name = "*";
SearchUsers(insUserPrincipal);
}
private void SearchUsers(UserPrincipal parUserPrincipal)
{
listBox1.Items.Clear();
PrincipalSearcher insPrincipalSearcher = new PrincipalSearcher();
insPrincipalSearcher.QueryFilter = parUserPrincipal;
PrincipalSearchResult<Principal> results = insPrincipalSearcher.FindAll();
foreach (Principal p in results)
{
UserPrincipal theUser = p as UserPrincipal;
if (theUser != null)
{
if (***theUser.IsAccountLockedOut()***)//**Is this same as Active or Inactive?**
{
listBox1.Items.Add(p);
}
else
{
}
}
}
}
所以我的问题是 (theUser.)IsAccountLockedUp 是否与询问用户是否处于非活动状态相同? 我知道有人可能会建议这个问题是 Get members of Active Directory Group and check if they are enabled or disabled 的副本,但这里的问题是我没有测试用户可以测试,我只是从 C# 开始。
谢谢
IsAccountLockedOut
对应于 Active Directory 帐户属性中的 "Account is locked out"。这意味着帐户由于尝试输入错误密码的次数过多而被锁定。
属性中还有另一个设置"Account is disabled"。如果相应的人离开公司,管理员(大型企业环境中的身份管理系统)通常使用它来禁用帐户。所以该帐户不能再使用了,但它仍然存在并用于 SID 查找(将在组或 ACL 中显示为名称)。
问问自己你的意图是什么。 "inactive" 是什么意思?
您或许可以以此为起点:
if (theUser != null)
{
if (theUser.IsAccountLockedOut())
{
// account locked out
}
// Enabled is nullable bool
if (!(theUser.Enabled == true))
{
// account disabled
}
if (theUser.LastLogon == null ||
theUser.LastLogon < DateTime.Now - TimeSpan.FromDays(150))
{
// never logged on or last logged on long time ago
// see below in the text for important notes !
}
}
检查 LastLogon 可用于查找孤立帐户。但请注意,女性可能正在休产假:-)
重要
在 Active Directory 中,有两个相似的属性:
- 上次登录
- 上次登录时间戳
见
为了区别。简而言之:只有 LastLogonTimeStamp 属性在域控制器之间复制,并且可以安全地用于检查孤立帐户。但即使是 LastLogonTimeStamp 也不是很准确,但足以检测 "old" / 未使用的帐户。
我还没有检查UserPrinciple.LastLogon
对应的是哪一个。小心。
我正在编写自己的 AD 搜索库,它基于 System.DirectoryServices 类。这有一些好处:更好的控制和更好的性能。如果准备好了,我可能会做到 public.