2

ADを使用してASP.NET認証作業を行うことができました。ここで、ADでOUをクエリし、結果をASP.NETページにListViewまたはGridViewのいずれかで表示したいと思います。

ドメインコントローラーは次のとおりです:dc.itlab.edu

OU:UsersStudents

組織単位(OU)のUsersStudentsには、次の列があります。

名、姓、Windows 2000以前のログオン名、名前、タイプ

OU UsersStudentsの列の名、姓、Windows 2000以前のログオン名を照会し、結果をListViewまたはGridViewにバインドしたいと思います。

C#またはVB.NETのいずれかで提案していただきありがとうございます。

4

3 に答える 3

4

.NET 3.5 を使用している場合、またはそれにアップグレードできる場合は、名前空間の導入によりLDAP が大幅に改善されました。System.DirectoryServices.AccountManagement

UserPrincipalこれには、よく使用される LDAP 属性のほとんどをプロパティとして提供するなどのクラスが含まれています。および QBE (Query-by-example)を使用するPrincipalSearcherと、関心のあるユーザー (または他のオブジェクト) を非常に簡単に見つけて、ASP.NET グリッド ビューにバインドすることができます。

新しい .NET 3.5 の詳細については、MSDN Magazine の次の優れた記事を参照してください。

.NET Framework 3.5 でのディレクトリ セキュリティ プリンシパルの管理 - 2008 年 1 月号

更新: .NET 3.5 インターフェイスを使用すると、次のようなコードを記述できます。

// define the content - domain name (second param) must be NetBIOS-style,
// third parameter is the container where to create the context for
PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "ITLAB", "OU=UsersStudents,DC=dc,DC=itlab,DC=edu");

// define your "prototype" for the searcher - here: you want to search for 
// users which have the .Enabled property set to true; you could define additional
// requirements here
UserPrincipal qbePrototype = new UserPrincipal(ctx);
qbePrototype.Enabled = true;

// create PrincipalSearcher based on that QBE prototype
PrincipalSearcher ps = new PrincipalSearcher(qbePrototype);

// find all matching Principals - in your case, those will be of type UserPrincipal
PrincipalSearchResult<Principal> results = ps.FindAll();

resultsこれで、または何かに直接バインドしDataGridViewて、探している列のプロパティを選択できるはずです。

  • 名 = UserPrincipal.GivenName
  • 姓 = UserPrincipal.Surname
  • Windows 2000 より前のログオン名 = UserPrincipal.SamAccountName
  • 名前=名前
  • タイプ = ?? ここで何を意味しますか??
于 2010-10-25T15:51:18.213 に答える
0

テストされていません**これは正しい方向を示します..必要なものに非常に近いはずです。

    Dim MySearchRoot As DirectoryEntry = New DirectoryEntry("LDAP://domain/DC=..", "usr", "pwd")
    Dim MyDirectorySearcher As New DirectorySearcher(MySearchRoot)

    MyDirectorySearcher.Filter = ("(&(objectCategory=organizationalunit)(name=UsersStudents))")

    MyDirectorySearcher.SearchScope = SearchScope.Subtree
    MyDirectorySearcher.PropertiesToLoad.Add("First Name")
    MyDirectorySearcher.PropertiesToLoad.Add("Last Name")
    MyDirectorySearcher.PropertiesToLoad.Add("Pre-Windows 2000 Logon Name")
    MyDirectorySearcher.PropertiesToLoad.Add("Name")
    MyDirectorySearcher.PropertiesToLoad.Add("Type")
    MyDirectorySearcher.Sort.Direction = System.DirectoryServices.SortDirection.Ascending
    MyDirectorySearcher.Sort.PropertyName = "Name"

    Dim MySearchResult As SearchResultCollection = MyDirectorySearcher.FindAll()

    Dim myTable As New DataTable("Results")
    Dim colName As String

    For Each colName In MyDirectorySearcher.PropertiesToLoad
        myTable.Columns.Add(colName, GetType(System.String))
    Next

    Dim result As SearchResult

    For Each result In MySearchResult
        Dim dr As DataRow = myTable.NewRow()
        For Each colName In MyDirectorySearcher.PropertiesToLoad
            If result.Properties.Contains(colName) Then
                    dr(colName) = CStr(result.Properties(colName)(0))
                End If
            Else
                dr(colName) = ""
            End If
        Next
        myTable.Rows.Add(dr)
    Next

    gridview.datasource = myTable
    gridview.databind()
于 2010-10-25T15:47:14.617 に答える
0

AD から ASP.Net GridView を作成するための C# サンプルがここにあります。

于 2010-10-25T15:42:20.073 に答える