2011-11-11 106 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() 
相關問題