2011-11-11 28 views
0

我有一项任务,用于自动发送AD中一系列组中的谁的报告。我想安排一份报告,每月从Crystal Reports运行一次。如何创建一个列出Active Directory组成员的Crystal Report

我按照说明创建了OLE DB(ADO)连接,并且连接正常。

在我的SQL查询中,我尝试:

SELECT member, descripton from 'LDAP://ou=blah,dc=blach,dc=blah' where cn ='TheGroupName' 

Crystal Reports允许该命令的工作。 (当然有真实的服务器参数);)

但是,成员列表是空白的,并且描述列表是空的。如果我将distinguishedName添加到SELECT,它会返回,所以我知道它能够获取对象属性。我也注意到嵌套组。我可能需要将这些扩展出来,直到获得用户列表。

例如:


组别1

  • 组2
  • 组3

组2

  • 拉里
  • 迈克尔

组3

  • 县夫人

我看到建议做一个LDIF到一个文件,然后使用后CR来解析t通过它。我希望尽可能简化此报告。

它甚至可以做到这一点?

感谢, TT

回答

0

确定。我没有人回应......但我想出了如何去做。

我做的是我写了一个Powershell脚本(用AD 2008模块)来创建一个XML文件。

然后我使用CR 2008从XML中提取数据并将其格式化为一个漂亮的报告。

这是我的代码。在我的例子中,我有超群组嵌套其他组。我需要从超级组中分离嵌套组,然后列出用户。

$theFile = new-object system.IO.StreamWriter("c:\temp\myfile.xml") 

$theFile.WriteLine('<?xml version="1.0" encoding="UTF-8"?>') 
$theSuperGroupArray = @("SuperGroup1","SuperGroup2) 
$theFile.WriteLine('<ADContentGroups>') 
foreach ($aSuperGroup in $theSuperGroupArray) { 
$strMembers = get-adgroupmember $aSuperGroup 

# main element 
$theFile.WriteLine('<ADGroup>') 
$theFile.WriteLine('<ADSuperGroup>' + $aSuperGroup + '</ADSuperGroup>') 
if($strMembers){ 

foreach($objitem in $strMembers){ 
    if($objitem.objectClass -ne "user") { 
     $theFile.WriteLine("<ADGroupElement>") 

    $theFile.WriteLine("<GroupName>" + $objitem.name + "</GroupName>") 
    $strNestedMembers = get-adgroupmember $objitem.name 
    foreach ($objNestedMembers in $strNestedMembers) { 
     $theFile.WriteLine("<Member>" + $objNestedMembers.name + "</Member>") 
    } 
    $theFile.WriteLine("</ADGroupElement>") 


}}} 
$theFile.WriteLine('</ADGroup>') 

} 
$theFile.WriteLine('</ADContentGroups>') 
$theFile.Close() 
相关问题