转换方案 GUID 在V. Active Directory

我正在努力了解以下情景 VB, 转换 GUID 在Active Directory中的字符串中:

http://support.microsoft.com/d ... 25649
本文展示了如何转换标识符的十六进制字符串形式 GUID 字符串形式的对象:

将以下代码插入文件 .vbs.

'================================================================
'Set the next line to reflect a DN for an object in the directory
'================================================================
Set obj = GetObject("LDAP://CN=Username,CN=Users,DC=DOMAIN,DC=COM")
MsgBox "The GUID string Value for user " & obj.Get("DisplayName") & _
" is " & ConvertHexStringGUIDToStringGUID(obj.GUID)

'================================================================
' ConvertHexStringGUIDToStringGUID function
'================================================================
Function ConvertHexStringGUIDToStringGUID(strOctet)
Dim tmpGUID, GUIDStr
'Convert the string by flipping the bits around.
GUIDStr = Mid(strOctet, 7, 2)
GUIDStr = GUIDStr + Mid(strOctet, 5, 2)
GUIDStr = GUIDStr + Mid(strOctet, 3, 2)
GUIDStr = GUIDStr + Mid(strOctet, 1, 2)
GUIDStr = GUIDStr + Mid(strOctet, 11, 2)
GUIDStr = GUIDStr + Mid(strOctet, 9, 2)
GUIDStr = GUIDStr + Mid(strOctet, 15, 2)
GUIDStr = GUIDStr + Mid(strOctet, 13, 2)
GUIDStr = GUIDStr + Mid(strOctet, 17, Len(strOctet))

tmpGUID = "{" & Mid(GUIDStr, 1, 8) & "-" & Mid(GUIDStr, 9, 4) & _
"-" & Mid(GUIDStr, 13, 4) & "-" & Mid(GUIDStr, 17, 4) & _
"-" & Mid(GUIDStr, 21, 15) & "}"

ConvertHexStringGUIDToStringGUID = tmpGUID
End Function

我有个问题:

这个脚本的结果是什么?

您必须有一个域帐户来运行命令

Set obj = GetObject("LDAP://CN=Username,CN=Users,DC=DOMAIN,DC=COM")

?
已邀请:

卫东

赞同来自:

首先回答最后一个问题:是的,您需要域帐户,否则

GetObject()

不会成功。

至于您的第一个问题:

GUID

属性返回按照按照订购的十六进制值字符串
http://msdn.microsoft.com/en-u ... .aspx
. 自第一届 4 字节存储为 DWORD, 后面的后面 2 WORD, 你应该服用
http://en.wikipedia.org/wiki/Endianness
在帐户中。 汽车 Intel 喂养 WORD 和 DWORD 直接字节 (
http://en.wikipedia.org/wiki/L ... _byte
first), 所以你需要先改变字节的顺序 4 字节。 其余数据结构是一个字节数组,因此这些字节已经处于正确的顺序。

例子:

假设您有这样的十六进制线:

000102030405060708090a0b0c0d0e0f

你会像这样折断:

00010203 0405 0607 08090a0b0c0d0e0f
DWORD WORD WORD BYTE[]

由于骑自行车编码,您需要更改第一个的顺序 4 字节 (每个2位十六进制代表 1 字节):

03020100 0504 0706 08090a0b0c0d0e0f

这就是这部分代码的 (我的评论):

' reverse DWORD
GUIDStr = Mid(strOctet, 7, 2)
GUIDStr = GUIDStr + Mid(strOctet, 5, 2)
GUIDStr = GUIDStr + Mid(strOctet, 3, 2)
GUIDStr = GUIDStr + Mid(strOctet, 1, 2)
' reverse 1st WORD
GUIDStr = GUIDStr + Mid(strOctet, 11, 2)
GUIDStr = GUIDStr + Mid(strOctet, 9, 2)
' reverse 2nd WORD
GUIDStr = GUIDStr + Mid(strOctet, 15, 2)
GUIDStr = GUIDStr + Mid(strOctet, 13, 2)

字符串的其余部分是一组字节,因此这些字节按以下顺序使用:

GUIDStr = GUIDStr + Mid(strOctet, 17, Len(strOctet))

以下指令格式化字符串中的十六进制行 GUID, 正确分组数字 (8-4-4-4-12):

tmpGUID = "{" & Mid(GUIDStr,  1,  8) & "-" & Mid(GUIDStr,  9, 4) & _
"-" & Mid(GUIDStr, 13, 4) & "-" & Mid(GUIDStr, 17, 4) & _
"-" & Mid(GUIDStr, 21, 15) & "}"

结果是以下行:

{03020100-0504-0706-0809-0a0b0c0d0e0f}

也可以看看
http://blogs.msdn.com/b/ericli ... .aspx
来自埃里克脂果进行更详细的解释。

要回复问题请先登录注册