#crystal-reports-2008
#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
- Туан
- Huyen
Я видел сообщение, в котором предлагается выполнить ldif для файла, а затем использовать CR для его анализа. Я бы хотел, чтобы этот отчет был максимально простым.
Возможно ли это вообще?
Спасибо, TT
Ответ №1:
ОК. Мне никто не ответил… НО я выяснил, как это сделать.
Что я сделал, так это написал сценарий Powershell (с модулями AD 2008) для создания XML-файла.
Затем я использую CR 2008 для загрузки из XML и форматирования его в красивый отчет.
Вот мой код. В моем примере у меня есть супергруппы, которые объединяют другие группы. Мне нужно отделить вложенные группы от супергрупп, а затем перечислить пользователей.
$theFile = new-object system.IO.StreamWriter("c:tempmyfile.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()