我的任务是自动通过电子邮件发送给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组
我看到一篇帖子建议对文件执行ldif,然后使用CR来解析它。我想尽可能简化这份报告。
甚至可以这样做吗?
谢谢, TT
答案 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()