16. コンピュータ取得サンプルコード(VB)
Public Shared Function GetComputers() As IList(Of Computer)
Dim computers As New List(Of Computer)()
Using root = GetRootEntry()
'ルートのDirectoryEntryを取得
Dim filter = String.Format("(objectCategory={0})", CategoryType.Computer)
Using searcher As New DirectorySearcher(root, filter)
Using results = searcher.FindAll()
For Each res As SearchResult In results
computers.Add(DirectCast(
CreateInstance(res.GetDirectoryEntry()), Computer))
Next
End Using
End Using
End Using
Return computers
End Function
※root は一般的には New DirectoryEntry(LDAPのルートパス) をセット
※CreateInstance メソッドは DirectoryEntry から DirectoryObject を作成
16
17. コンピュータ取得サンプルコード(C#)
public static IList<Computer> GetComputers() {
var computers = new List<Computer>();
using (var root = GetRootEntry()) {
//ルートのDirectoryEntryを取得
var filter = String.Format("(objectCategory={0})", CategoryType.Computer);
using (var searcher = new DirectorySearcher(root, filter)) {
using (var results = searcher.FindAll()) {
foreach (SearchResult res in results) {
groups.Add(
(Computer)CreateInstance(res.GetDirectoryEntry()));
}
}
}
}
return computers;
}
※root は一般的には new DirectoryEntry(LDAPのルートパス) をセット
※CreateInstance メソッドは DirectoryEntry から DirectoryObject を作成
17
18. 所属するグループの取得(VB)
Public Function GetBelongGroups(groups As IEnumerable(Of
DomainGroup)) As ReadOnlyCollection(Of String)
Dim belongGroups = groups.Where(
Function(group) group.Native.IsMember(MyBase.Entry.Path)).Select(
Function(group) group.Name).ToList()
belongGroups.Add(
DirectoryAccess.GroupTokens.Item(Me.PrimaryGroupId))
belongGroups.Sort()
Return belongGroups.AsReadOnly()
End Function
ユーザの場合は IADsUser.Groups メソッドで所属するグループを取得できます
が、コンピュータの場合はできないのでグループのコレクションが必要です。
個々のグループに対してメンバであれば(IADsGroup.IsMember メソッドが
True を返せば)そのグループに所属していると判断しています。
プライマリ グループの追加についてはユーザの場合と同じです。
18