Active directory 使用C检索特定的Active Directory记录属性#
我被要求设置一个进程来监视active directory,特别是某些帐户,以检查它们是否未被锁定,以便在发生这种情况时,支持团队可以得到早期警告 我发现了一些代码,可以帮助我开始创建请求,并将它们添加到通知队列中。然后将此事件指定给更改事件,并向其传递ObjectChangedEventArgs对象 目前,它遍历属性并将其写入文本文件,如下所示:Active directory 使用C检索特定的Active Directory记录属性#,active-directory,Active Directory,我被要求设置一个进程来监视active directory,特别是某些帐户,以检查它们是否未被锁定,以便在发生这种情况时,支持团队可以得到早期警告 我发现了一些代码,可以帮助我开始创建请求,并将它们添加到通知队列中。然后将此事件指定给更改事件,并向其传递ObjectChangedEventArgs对象 目前,它遍历属性并将其写入文本文件,如下所示: private static void NotifierObjectChanged(object sender,
private static void NotifierObjectChanged(object sender,
ObjectChangedEventArgs e)
{
if (e.ResultEntry.Attributes.AttributeNames == null)
{
return;
}
// write the data for the user to a text file...
using (var file = new StreamWriter(@"C:\Temp\UserDataLog.txt", true))
{
file.WriteLine("{0} {1}", DateTime.UtcNow.ToShortDateString(), DateTime.UtcNow.ToShortTimeString());
foreach (string attrib in e.ResultEntry.Attributes.AttributeNames)
{
foreach (object item in e.ResultEntry.Attributes[attrib].GetValues(typeof(string)))
{
file.WriteLine("{0}: {1}", attrib, item);
}
}
}
}
我希望检查对象,如果特定字段(如name)是特定值,则检查IsAccountLocked属性是否为True,否则跳过记录并等待下一个通知。我正在努力学习如何访问ResultEntry的特定属性,而不必遍历它们
我希望这是有意义的-请询问我是否可以提供任何其他信息
谢谢Martin这可能会非常棘手,具体取决于您的具体业务需求。如果您想更详细地交谈,请在脱机状态下与我联系,我很乐意通过电子邮件/电话/即时通讯提供帮助 因此,我要注意的第一件事是,根据在此之前查询的外观,这可能非常昂贵或容易出错(即缺少结果)。这让我有些担心,因为大多数示例代码都会出错。:)你是如何得到已经改变的东西的?虽然这听起来很简单,但考虑到AD支持的语义以及它是一个多主机系统,到处都有写操作(并在事后进行复制),这在directory land中实际上是一个有点棘手的问题。 其他变量可能是,您运行此操作的频率,AD中的数据集可能有多大,等等。 AD已经构建了一些API来帮助您(脑海中出现的一个大API叫做DirSync),但是如果您以前没有使用过它,这可能会有点复杂。这就是“ping me offline”部分的用武之地 对于您的确切问题,我假设您的结果实际上是SearchResultEntry(如果不是,我可以修改,告诉我您手头有什么)。如果是这样的话,你会发现一个属性字段挂在那个家伙身上,从那里有属性名和值。我想如果你手头有价值观,你会看到它是如何运作的,例如:
foreach (var attr in sre.Attributes.Values)
{
var da = (DirectoryAttribute)attr;
Console.WriteLine(da.Name);
foreach (var val in da.GetValues(typeof(byte[])))
{
// Handle a byte[] val ...
}
}
正如我所说,如果您手头有SearchResulty以外的内容,请告诉我们,我可以修改代码示例。谢谢Eric,这非常有帮助。好的,现在这个查询有一个子树范围,我可以给你提供一个示例查询,但是它当前返回任何用户ID的所有字符串属性,这些用户ID已经应用了更改,比如他们已经登录、注销、更改了密码等等。所以我不想要的是那个人的所有数据,但要检查此人是否是服务帐户列表中的一员,如果是,则检查以确保该帐户未被锁定。可以向支持团队发送警报,以便在有人可用时立即解锁。我非常感谢您提供的任何帮助,因为尽管我对AD有模糊的理解,但听起来您比我知道的要多得多!:)MartinFYI通知人收到的查询是:OU=Associates,OU=User Accounts,OU=XXX,OU=Migration,DC=AAA,DC=BBB,DC=ccc如果我们超出合理范围,请随时给我发电子邮件。因此,要限制属性,您只需要从请求*属性集切换到您想要的确切属性。这就是说,在确定账户是否被锁定方面有很多细微差别。帐户进入各种状态,身份验证可能会开始失败。为了让生活更轻松,Microsoft为您提供了一个构造属性(),使生活更轻松。寻找锁定位。谢谢@Eric。我相信这个链接会很有帮助,但是是的,我想当我无法理解的时候,我可能会求助于电子邮件…:)