0

Active Directoryを使用して、ユーザー情報を取得しようとしています。ほとんどの場合、それは機能しています。問題は、ユーザーの最終ログオン日を取得できないように見えることです。誰か提案がありますか?私のコードは次のとおりです。

    Public Shared Function GetUsersByUsername(ByVal Username As String) As ADUser
    Dim myUser As New ADUser
    Dim oroot As DirectoryEntry = New DirectoryEntry("GC://ldap.myCompany.com")
    Dim osearcher As DirectorySearcher = New DirectorySearcher(oroot)
    Dim result As SearchResult

    osearcher.Filter = String.Format("(&(SAMAccountName={0}))", Username)
    osearcher.PropertiesToLoad.Add("cn")
    osearcher.PropertiesToLoad.Add("SAMAccountName")   'Users login name  
    osearcher.PropertiesToLoad.Add("givenName")    'Users first name  
    osearcher.PropertiesToLoad.Add("sn")   'Users last name  
    osearcher.PropertiesToLoad.Add("mail")   'Email address       
    osearcher.PropertiesToLoad.Add("accountExpires") 'expiration date

    result = osearcher.FindOne
    Try
        Dim userPath As String() = result.Path.ToString.Split(New Char() {","c})
        Dim parsedString As String
        Dim User As DirectoryEntry
        Dim expirationDate As String

        User = result.GetDirectoryEntry()

        myUser.UserID = result.Properties("cn").Item(0)
        myUser.EmailAddress = result.Properties("mail").Item(0)
        myUser.FirstName = result.Properties("givenName").Item(0)
        myUser.LastName = result.Properties("sn").Item(0)         

        expirationDate = result.Properties("accountExpires").Item(0)

        If (isAccountLocked(User) = True) Then
            myUser.Status = ADUser.AccountStatus.Locked
        ElseIf (isAccountEnabled(User) = False) Then
            myUser.Status = ADUser.AccountStatus.Disabled
        ElseIf (isAccountExpired(expirationDate) = True) Then
            myUser.Status = ADUser.AccountStatus.Expired
        Else
            myUser.Status = ADUser.AccountStatus.Active
        End If

        parsedString = userPath((userPath.Length - 3))
        myUser.Domain = parsedString.Substring(3, parsedString.Length - 3)

    Catch ex As Exception
        Return Nothing
    End Try

    Return myUser
End Function
4

2 に答える 2

1

私のために働く:

  1. プロパティをロードします。

    osearcher.PropertiesToLoad.Add("lastLogon")  
    
  2. アクセス:

    dim myDateInterval = result.Properties("lastLogon").Item(0)
    

間隔値が返されることに注意してください。64ビット、符号なしだと思います。.NET にはいくつかのキャスト方法がありますが、署名された 64 ビットのみを使用します。それが問題になる前に何年先になるかを確認していません!

また、DirectoryServices から新しい UserPrincipal を使用すると、それに lastlogon が含まれ、null 許容の日付が返されます。

于 2016-05-18T01:09:37.760 に答える
0

「lastLogon」LDAP 属性を試しましたか? あなたのコードは良さそうですが、情報が AD のどこに保存されているのかよくわからないのではないでしょうか?

于 2013-02-05T14:04:00.987 に答える