Как создать отчет Crystal со списком членов групп Active Directory - PullRequest
0 голосов
/ 12 ноября 2011

У меня есть задача автоматически отправить отчет о том, кто входит в серию групп в AD. Я хотел бы запланировать запуск отчета один раз в месяц из Crystal Reports.

Я выполнил инструкции по созданию соединений OLE DB (ADO), и все подключилось нормально.

В моем запросе SQL я пытаюсь:

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

Crystal Reports позволяет этой команде работать. (конечно с реальными параметрами сервера);)

Однако список участников пуст, а список описания пуст. Если я добавляю отличительное имя в SELECT, оно возвращается, поэтому я знаю, что оно может получить атрибуты объекта.

Кроме того, я заметил вложенные группы. Возможно, мне придется расширить их, пока я не получу список пользователей.

Например:


Group1

  • Джо
  • Jane
  • Group2
  • Group3

Group2

  • Ларри
  • Michael

Group3

  • Туан
  • Гуйен

Я видел сообщение, в котором предлагается сделать ldif для файла, а затем использовать CR для его анализа. Я хотел бы сделать этот отчет максимально простым.

Возможно ли это сделать?

Спасибо, TT

1 Ответ

0 голосов
/ 02 января 2012

OK.Мне некому ответить ... НО я понял, как это сделать.

Я написал сценарий 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()
...