Načtení hodnoty PwdLastSet z activedirectory   zodpovězená otázka

VB.NET

Dobrý den, prosím o radu.

Přepracoval jsem si program který načítá hodnoty z AD až jsem narazil na problém a to je, že nedokážu vůbec zobrazit některé hodnoty jako je například "pwdLastSet"

Ukázka z kodu. Zde už zde vybírám uživatele a zobrazují se mi o něm detailní informace.

 Private Sub ListView1_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles ListView1.SelectedIndexChanged 

        If ListView1.SelectedItems.Count = 1 Then 
            lblUserDN.Text = ListView1.SelectedItems(0).SubItems(5).Text '
          End If

 Using user As New DirectoryEntry("LDAP://" & lblUserDN.Text)

                 If user.Properties.Contains("CanonicalName") Then 
                Dim strUserCanonicalName = CStr(user.Properties("CanonicalName")(0)) 
            End If


            If user.Properties.Contains("sAMAccountName") Then 
                Me.tbUserID.Text = CStr(user.Properties("sAMAccountName")(0)) 
            Else
                Me.tbUserID.Text = Nothing
            End If
.
.
.
.
.

Pokud se to samé pokusím udělat například s "pwdLastSet", tak mi to vyhodí hlášku: Převod typu _ComObject na typ String není platný.

Pokoušel jsem se převádět hodnotu na Long, hledal jsem na google (ale tam každý řeší, že se mu zobrazuje 16ti místné číslo a neumí ho převést na čas, přitom hodnotu načítají stejným způsobem).

Zkoušel jsem to pod uživatele i pod administrátrem. Něco dělám úplně špatně a nevím co. (Kromě toho, že bych se mohl naučit lépe programovat :D)

Díky za každou radu.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Musí se vrácený COMObject převést na Int64 a pak na DateTime takto:

Imports System
Imports System.DirectoryServices
Imports System.Runtime.InteropServices

<ComImport, Guid("9068270b-0939-11D1-8be1-00c04fd8d503"), InterfaceType(ComInterfaceType.InterfaceIsDual)> _
Public Interface IADsLargeInteger
    Property HighPart As Integer
    Property LowPart As Integer
End Interface

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Using user As New DirectoryEntry("LDAP://<SID=010500000000000515000000E633FBBC01A104CAAEE8E417E30A0000>")

        Dim pwdEntry As Object = user.Properties("pwdLastSet").Value
        Dim pwdDate As DateTime = DateTime.FromFileTimeUtc(GetInt64FromLargeInteger(pwdEntry))
    End Using
End Sub

Function GetInt64FromLargeInteger(ByVal largeInteger As Object) As Int64
    Dim low As Int32
    Dim high As int32
    Dim valBytes(7) As Byte

    Dim longInt As IADsLargeInteger = CType(largeInteger, IADsLargeInteger)
    low = longInt.LowPart
    high = longInt.HighPart

    BitConverter.GetBytes(low).CopyTo(valBytes, 0)
    BitConverter.GetBytes(high).CopyTo(valBytes, 4)

    Return BitConverter.ToInt64(valBytes, 0)
End Function
nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

Moc díky.

Kavalitní jasná a rychlá dpověď.

Fuguje to, jdu si to projít, ale bohužel asi nepochopím co jsme vlastně udělali.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback