3

有什么方法可以将用户添加到组的确切时间,然后自动从组中删除用户?
例如: CN=testuser1现在CN=testgroup1
我想添加CN=testuser11CN=testgroup1天。在那一天之后,用户应该自动
离开(不再是该组的成员)。 这是否可能,或者除了 Powershell 脚本之外还有其他解决方案吗? CN=testgroup1
System.DirectoryServices.AccountManagement;System.DirectoryServices;

提示:我不想要一个带有 powershell 脚本或类似东西的解决方案。它应该在我的 c# 程序中完成。我有一个 Windows 窗体,其中有 3 个文本框:

  • 来自 AD 的用户名:在 AD 中搜索用户(我已经有一个搜索者)
  • 来自 AD 的组名:在 AD 中搜索组(我已经有一个搜索者)
  • 和持续时间:这是我要输入用户应该在该组中的持续时间(以天为单位)

当我按下“将用户临时添加到组”按钮时,应将用户添加到该组中的特定时间,我可以在该持续时间文本框中输入该时间。

提前致谢!

4

2 回答 2

1

是的,这是可能的。它要求您拥有 Windows Server 2016 林并启用特权访问管理可选功能。

一旦你有了这个,你可以为一个链接的值指定一个 TTL,比如一个组成员。此博客https://www.dsinternals.com/en/how-the-active-directory-expiring-links-feature-really-works/向您展示了如何执行此操作。我不知道您是否可以通过 ADSI (System.DirectoryServices) 提供语法,或者您是否需要使用 System.DirectoryServices.Protocols 回退到直接 LDAP 调用。

于 2018-08-29T14:41:37.287 回答
1

Brian 回答了这个问题 - 这是一个 C# 示例,说明我们如何按照对他的回答的评论的要求完成此操作。

using (GroupPrincipal group = GroupPrincipal.FindByIdentity(context, groupName))
{
    TimeSpan span = accessUntil.Subtract(dtNow.Value);
    DirectoryEntry groupDirectoryEntry = (DirectoryEntry)group.GetUnderlyingObject();
    groupDirectoryEntry.Properties["member"].Add("<TTL=" + ((int)span.TotalSeconds).ToString() + "," + user.DistinguishedName + ">");
    groupDirectoryEntry.CommitChanges();
    groupDirectoryEntry.Close();
}

请注意,如果成员已经存在一个 TTL,则“添加”将替换当前的 TTL。

于 2021-08-27T15:27:06.770 回答