VB.net 从 Active Directory 获取 bitlocker 密码 ID
VB.net get bitlocker Password ID from Active Directory
我有一个 VB.net 程序,我正在尝试添加一个 bitlocker 查找工具,该工具将在活动目录中搜索机器名称,并显示 "Password ID" 和 "Recovery Password"
到目前为止,我的 script/code 可以完美地查找和显示恢复密码,但我无法让它显示密码 ID。
我试过:
Item.Properties("msFVE-RecoveryGuid")(0)
其中returns错误"System.InvalidCastException: Conversion from type 'Byte()' to type 'String' is not valid."
Item.Properties("msFVE-RecoveryGuid")(0).ToString
哪个returns"System.Byte[]"
Item.Properties("msFVE-RecoveryGuid").ToString
哪个returns"System.DirectoryServices.ResultPropertyValueCollection"
到目前为止,在我的搜索中我只看到了 C# 示例,我还没有翻译。
恢复密码同样有效:
(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)
所以我发现我需要将字节转换为十六进制,以便使它们与 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))
我有一个 VB.net 程序,我正在尝试添加一个 bitlocker 查找工具,该工具将在活动目录中搜索机器名称,并显示 "Password ID" 和 "Recovery Password"
到目前为止,我的 script/code 可以完美地查找和显示恢复密码,但我无法让它显示密码 ID。
我试过:
Item.Properties("msFVE-RecoveryGuid")(0)
其中returns错误"System.InvalidCastException: Conversion from type 'Byte()' to type 'String' is not valid."
Item.Properties("msFVE-RecoveryGuid")(0).ToString
哪个returns"System.Byte[]"
Item.Properties("msFVE-RecoveryGuid").ToString
哪个returns"System.DirectoryServices.ResultPropertyValueCollection"
到目前为止,在我的搜索中我只看到了 C# 示例,我还没有翻译。
恢复密码同样有效:
(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)
所以我发现我需要将字节转换为十六进制,以便使它们与 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))