如何创建列出Active Directory组成员的Crystal Report

时间:2011-11-11 20:32:39

标签: crystal-reports-2008

我的任务是自动通过电子邮件发送给AD中一系列群组的人员的报告。我想安排一个报告每月从Crystal Reports运行一次。

我按照说明创建了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来解析它。我想尽可能简化这份报告。

甚至可以这样做吗?

谢谢, TT

1 个答案:

答案 0 :(得分: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()