15. 組織単位取得サンプルコード(VB)
Public Shared Function GetOrganizationalUnits(
) As IList(Of OrganizationalUnit)
Dim ous As New List(Of OrganizationalUnit)()
Using root = GetRootEntry() 'ルートのDirectoryEntryを取得
Dim filter = "(objectCategory=OrganizationalUnit)"
Using searcher As New DirectorySearcher(root, filter)
Using results = searcher.FindAll()
For Each res As SearchResult In results
ous.Add(DirectCast(CreateInstance(res.GetDirectoryEntry()),
OrganizationalUnit)) 'DirectoryObject を作成して追加
Next
End Using
End Using
End Using
Return ous
End Function
※root は一般的には New DirectoryEntry(LDAPのルートパス) をセット
15
16. 組織単位取得サンプルコード(C#)
public static IList<OrganizationalUnit> GetOrganizationalUnits() {
var ous = new List<OrganizationalUnit>();
using (var root = GetRootEntry()) { //ルートのDirectoryEntryを取得
var filter = "(objectCategory=OrganizationalUnit)";
using (var searcher = new DirectorySearcher(root, filter)) {
using (var results = searcher.FindAll()) {
foreach (SearchResult res in results) {
ous.Add((OrganizationalUnit)CreateInstance(
res.GetDirectoryEntry())); //DirectoryObject を作成して追加
}
}
}
}
return ous;
}
※root は一般的には new DirectoryEntry(LDAPのルートパス) をセット
16
17. 直下のデータ取得サンプルコード(VB)
Friend Shared Function GetStoredDomainObjects(
ou As OrganizationalUnit) As List(Of DomainObject)
Dim objects As New List(Of DomainObject)()
Using searcher As New DirectorySearcher(ou.Entry)
searcher.SearchScope = SearchScope.OneLevel
Using results = searcher.FindAll()
For Each res As SearchResult In results
objects.Add(DirectCast(CreateInstance(res.GetDirectoryEntry()),
DomainObject)) 'DirectoryObject を作成して追加
Next
End Using
End Using
Return objects.OrderBy(Function(o) o.Name).ToList()
End Function
※直下のデータのみ必要なので DirectorySearcher.SearchScope プロパティ
に SearchScope.OneLevel を指定(検索ルートは対象のOU)
17
18. 直下のデータ取得サンプルコード(C#)
internal static List<DomainObject>
GetStoredDomainObjects(OrganizationalUnit ou) {
var objects = new List<DomainObject>();
using (var searcher = new DirectorySearcher(ou.Entry)) {
searcher.SearchScope = SearchScope.OneLevel;
using (var results = searcher.FindAll()) {
foreach (SearchResult res in results) {
objects.Add((DomainObject)CreateInstance(
res.GetDirectoryEntry())); //DirectoryObject を作成して追加
}
}
}
return objects.OrderBy(o => o.Name).ToList();
}
※直下のデータのみ必要なので DirectorySearcher.SearchScope プロパティ
に SearchScope.OneLevel を指定(検索ルートは対象のOU)
18
19. 組織単位の検索サンプルコード(VB)
<DataObjectMethod(DataObjectMethodType.Select)>
Public Shared Function FindByPath(path As String) As OrganizationalUnit
'distinguishedNameを生成
Dim ouNames = path.Split("/"c).Reverse()
Dim sb As New StringBuilder()
For Each ouName In ouNames
sb.AppendFormat("OU={0},", ouName)
Next
For Each dc In DirectoryAccess.DomainName.Split("."c)
sb.AppendFormat("DC={0},", dc)
Next
sb.Length -= 1
Return DirectCast(DirectoryAccess.FindDirectoryObject(sb.ToString(),
CategoryType.OrganizationalUnit), OrganizationalUnit)
End Function
19
20. 組織単位の検索サンプルコード(C#)
[DataObjectMethod(DataObjectMethodType.Select)]
internal static OrganizationalUnit FindByPath(string path) {
//distinguishedNameを生成
var ouNames = path.Split('/').Reverse();
var sb = new StringBuilder();
foreach (var ouName in ouNames) {
sb.AppendFormat("OU={0},", ouName);
}
foreach (var dc in DirectoryAccess.DomainName.Split('.')) {
sb.AppendFormat("DC={0},", dc);
}
sb.Length--;
return (OrganizationalUnit)DirectoryAccess.FindDirectoryObject(
sb.ToString(), CategoryType.OrganizationalUnit);
}
20