2012-08-30 61 views
0

我被要求设置一个监视活动目录(特别是某些帐户)的进程,以检查它们未锁定,以便在发生这种情况时支持团队可以获得预先警告。使用C#检索特定的Active Directory记录属性

我发现了一些代码让我开始基本设置请求,并将它们添加到通知队列。然后将该事件分配给更改事件,并将ObjectChangedEventArgs对象传递给它。

目前,它通过属性迭代,并将其写入到一个文本文件,像这样:

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); 
       } 
      } 
     } 
    } 

我想什么是检查对象,如果一个特定的领域,如姓名,是一个特定的值,然后检查IsAccountLocked属性是否为True,否则跳过该记录并等待,直到下一个通知进来。我正在努力如何访问ResultEntry的特定属性,而无需遍历所有这些属性。

我希望这是有道理的 - 请询问我是否可以提供任何其他信息。

感谢
马丁

回答

0

这有可能会粗糙根据您的具体业务要求。如果你想更详细地谈谈我离线,我很乐意帮助通过电子邮件/电话/ IM。

因此,我要说明的第一件事是,根据查询在此之前的样子,这可能相当昂贵或容易出错(即缺少结果)。这让我很担心,因为大多数示例代码都会出错。 :)你如何得到改变的东西?虽然这听起来很简单,但考虑到AD支持的语义以及它是一个多主系统,写入发生在整个地方(并在事后复制),这在目录域中实际上是一个有点棘手的问题。其他变量可能是你想要运行的频率,AD中的数据集有多大,等等。 AD有一些API可以帮助你在这里(想到的最大的API叫做DirSync),但是如果你以前没有用过它,这可能会有些复杂。这是“ping me offline”部分进入的地方。

对于你确切的问题,我假设你的结果实际上是一个SearchResultEntry(如果我不能修改,告诉我你手头有什么)。如果是这种情况,那么你会发现一个属性字段悬挂在那个人身上,从那里有AttributeNames和Values。我想你会看到它从那里是如何工作的,如果你有价值观在手,例如:

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 ... 
    } 
} 

正如我所说的,如果你有比手SearchResultEntry其他的东西,让我们知道,我可以修改代码示例。

+0

谢谢Eric,这非常有帮助。好的,目前查询有一个子树的范围,我可以为您提供一个示例查询,但是它当前返回所有用户ID的字符串属性,这些用户的ID已经应用了更改,即它们已经登录,注销,更改密码等等。所以我不想要的是该人员的所有数据,但是检查该人员是否是列表中的一个,在这种情况下是服务帐户,然后如果是,请检查以确保该帐户未被锁定。警报可发送给支持团队,以便在有人可用时立即解锁。 –

+0

我会很感激你可以给予的任何帮助,因为虽然我对AD有一个模糊的理解,但听起来你知道的比以前任何时候都多!:)马丁 –

+0

仅供参考通知的查询是:OU = Associates,OU =用户帐户,OU = XXX,OU =迁移,DC = AAA,DC = BBB,DC = CCC –

相关问题