0

このコードを使用して Active Directory でユーザー アカウントを検索していますが、これは問題なく動作します。

Dim insPrincipalContext As New PrincipalContext(ContextType.Domain, Environment.UserDomainName, "DC=domain,DC=com")

    Dim insUserPrincipal As New UserPrincipal(insPrincipalContext)
    insUserPrincipal.Description = empID
    Dim insPrincipalSearcher As New PrincipalSearcher()
    Dim currentADUser As System.DirectoryServices.AccountManagement.UserPrincipal
    insPrincipalSearcher.QueryFilter = insUserPrincipal
    Dim results As PrincipalSearchResult(Of Principal) = insPrincipalSearcher.FindAll
    For Each p As Principal In results
        currentADUser = p
        adUsername = currentADUser.SamAccountName
        adLast = currentADUser.Surname
        adFirst = currentADUser.GivenName
        adMail = currentADUser.EmailAddress
    Next

問題は、必要なユーザー アカウントが複数の場所に存在する可能性があることです。そのため、検索する OU を指定したくありませんが、返されたくない 2 つの OU に存在する可能性があります。検索からこれら 2 つの OU を除外する方法はありますか?

同様の質問をいくつか見つけましたが、VB.Net と system.directory.accountmanagement 名前空間をこのように使用していたものはありません。

4

2 に答える 2

0
Dim reduce = results.Where(Function(p) p.SamAccounNams = "Name").FirstOrDefault

よし、じゃあこうしよう

Dim reduce results.Where(Function(p) Not p.DistinguishedName.Contains("OU=UnwantedOU1") and Not p.DistinguishedName.Contains("OU=UnwantedOU").ToList()

これにより、不要な 2 つの OU に含まれていないすべてのユーザーが表示されます。

幸運を

于 2013-09-13T22:32:25.410 に答える
0

結果に DistinguishedName を追加し、除外したい OU をチェックすることで、やりたいことを実行する方法を見つけました。これが完全に機能する例です。

Dim insPrincipalContext As New PrincipalContext(ContextType.Domain, Environment.UserDomainName, "DC=Mydomain,DC=com")

    Dim insUserPrincipal As New UserPrincipal(insPrincipalContext)
    insUserPrincipal.Description = empID
    Dim insPrincipalSearcher As New PrincipalSearcher()
    Dim currentADUser As System.DirectoryServices.AccountManagement.UserPrincipal
    insPrincipalSearcher.QueryFilter = insUserPrincipal
    Dim results As PrincipalSearchResult(Of Principal) = insPrincipalSearcher.FindAll
    For Each p As Principal In results
        currentADUser = p
        adDistName = currentADUser.DistinguishedName
        If InStr(adDistName, "OU=UnwantedOU1") Or InStr(adDistName, "OU=UnwantedOU2") Then
            Continue For
        Else
            adUsername = currentADUser.SamAccountName
            adLast = currentADUser.Surname
            adFirst = currentADUser.GivenName
            adMail = currentADUser.EmailAddress
            Exit For
        End If
    Next
于 2013-09-16T16:16:56.770 に答える