VB.net получить идентификатор пароля BitLocker из Active Directory

У меня есть программа VB.net, в которой я пытаюсь добавить средство поиска битлокера, которое будет искать в активном каталоге имя компьютера и отображать "Пароль ID", а также "Пароль восстановления"

Пока мой скрипт / код безупречно работает для поиска и отображения пароля восстановления, но я не могу заставить его отображать идентификатор пароля.

Я пробовал:

Item.Properties("msFVE-RecoveryGuid")(0)

Что возвращает ошибку "System.InvalidCastException: преобразование из типа" Byte() "в тип" String "недопустимо".

Item.Properties("msFVE-RecoveryGuid")(0).ToString

Что возвращает "System.Byte[]"

Item.Properties("msFVE-RecoveryGuid").ToString

Который возвращает "System.DirectoryServices.ResultPropertyValueCollection"

До сих пор в своем поиске я видел только примеры на C# и не смог перевести.

То же самое для Recovery Password работает, однако:

(Item.Properties("msFVE-RecoveryPassword")(0))

Вот большой фрагмент того, что у меня есть для контекста:

    Dim RootDSE As New DirectoryEntry("LDAP://RootDSE")
    Dim DomainDN As String = RootDSE.Properties("DefaultNamingContext").Value
    Dim ADsearch As New DirectorySearcher("LDAP://" & DomainDN)

    ADsearch.Filter = ("(&(objectClass=computer)(name=" & MachineName & "))")

    Dim ADresult As SearchResult = ADsearch.FindOne
    Dim ADpath As String = ADresult.Path

    Dim BTsearch As New DirectorySearcher()

    BTsearch.SearchRoot = New DirectoryEntry(ADpath)
    BTsearch.Filter = "(&(objectClass=msFVE-RecoveryInformation))"

    Dim BitLockers As SearchResultCollection = BTsearch.FindAll()



    Dim Item As SearchResult

    Dim longTempstring As String = ""

    For Each Item In BitLockers
        If Item.Properties.Contains("msFVE-RecoveryGuid") Then

            Dim tempstring As String = Item.Properties("msFVE-RecoveryGuid")(0).ToString

            longTempstring = longTempstring & tempstring & vbNewLine
            'ListBox2.Items.Add(Item.Properties("msFVE-RecoveryGuid")(0))

        End If
        If Item.Properties.Contains("msFVE-RecoveryPassword") Then

            ListBox1.Items.Add(Item.Properties("msFVE-RecoveryPassword")(0))

        End If
    Next

    MsgBox(longTempstring)

1 ответ

Решение

Поэтому я понял, что мне нужно преобразовать байты в шестнадцатеричные, чтобы они соответствовали тому, что просматривается в консоли управления Microsoft. Как только я начал это делать, единственная проблема, с которой я столкнулся, это то, что я обнаружил, что индексация байтовых массивов не в том порядке, в котором они находятся в Active Directory. - поэтому вместо циклов мне пришлось перечислять каждый индекс массива байтов и сортировать их по соответствующим позициям, чтобы они соответствовали тому, как они отображаются в AD.

Моя конечная функция:

Function bitread(ByVal GUID As Byte())
    Dim tempVar As String
    tempVar = GUID(3).ToString("X02") & GUID(2).ToString("X02") _
        & GUID(1).ToString("X02") & GUID(0).ToString("X02") & "-" _
        & GUID(5).ToString("X02") & GUID(4).ToString("X02") & "-" _
        & GUID(7).ToString("X02") & GUID(6).ToString("X02") & "-" _
        & GUID(8).ToString("X02") & GUID(9).ToString("X02") & "-" _
        & GUID(10).ToString("X02") & GUID(11).ToString("X02") _
        & GUID(12).ToString("X02") & GUID(13).ToString("X02") _
        & GUID(14).ToString("X02") & GUID(15).ToString("X02")
    Return tempVar
End Function

Вызывается с:

bitread(Item.Properties("msFVE-RecoveryGUID")(0))
Другие вопросы по тегам