我想通过输入组名来获取组的SID,它将返回SID。有没有办法用vbscript做到这一点?任何帮助都会很棒
答案 0 :(得分:1)
使用WMI解析SID:
Set wmi = GetObject("winmgmts://./root/cimv2")
groupname = "..."
qry = "SELECT * FROM Win32_Group WHERE Name='" & groupname & "'"
For Each group In wmi.ExecQuery(qry)
sid = group.SID
Next
If Not IsEmpty(sid) Then
WScript.Echo "Group " & groupname & " has SID " & sid & "."
Else
WScript.Echo "SID For group " & groupname & " could not be resolved."
End If
如果您需要转换AD中使用的二进制SID,我建议您执行以下操作:
Function DecodeSID(binSID)
ReDim octets(LenB(binSID))
'convert binary string to octet array
For i = 1 To LenB(binSID)
octets(i-1) = AscB(MidB(binSID, i, 1))
Next
'convert octet array to SID string
sid = "S-" & CStr(octets(0)) & "-" & Octet2Str(Array(octets(2), octets(3), _
octets(4), octets(5), octets(6), octets(7)))
For i = 8 To (4 * octets(1) + 4) Step 4
sid = sid & "-" & OctetArrayToString(Array(octets(i+3), octets(i+2), _
octets(i+1), octets(i)))
Next
DecodeSID = sid
End Function
Function OctetArrayToString(arr)
v = 0
For i = 0 To UBound(arr)
v = v * 256 + arr(i)
Next
OctetArrayToString = CStr(v)
End Function
有关二进制SID的更多信息,请参阅here。
答案 1 :(得分:0)
我忘记了我的位置,但这里是:
Set oAD = GetObject(sLDAP) ' sLDAP starts with "LDAP://"
wscript.echo "SID: " & HexSIDToDec(OctetToHexStr(oAD.Get("objectSid"))))
Function HexSIDToDec(strSID)
' Function to convert most hex SID values to decimal format.
Dim arrbytSID, lngTemp, j
ReDim arrbytSID(Len(strSID)/2 - 1)
For j = 0 To UBound(arrbytSID)
arrbytSID(j) = CInt("&H" & Mid(strSID, 2*j + 1, 2))
Next
If (UBound(arrbytSID) = 11) Then
HexSIDToDec = "S-" & arrbytSID(0) & "-" & arrbytSID(1) & "-" & arrbytSID(8)
Exit Function
End If
If (UBound(arrbytSID) = 15) Then
HexSIDToDec = "S-" & arrbytSID(0) & "-" & arrbytSID(1) & "-" & arrbytSID(8)
lngTemp = arrbytSID(15)
lngTemp = lngTemp * 256 + arrbytSID(14)
lngTemp = lngTemp * 256 + arrbytSID(13)
lngTemp = lngTemp * 256 + arrbytSID(12)
HexSIDToDec = HexSIDToDec & "-" & CStr(lngTemp)
Exit Function
End If
HexSIDToDec = "S-" & arrbytSID(0) & "-" & arrbytSID(1) & "-" & arrbytSID(8)
lngTemp = arrbytSID(15)
lngTemp = lngTemp * 256 + arrbytSID(14)
lngTemp = lngTemp * 256 + arrbytSID(13)
lngTemp = lngTemp * 256 + arrbytSID(12)
HexSIDToDec = HexSIDToDec & "-" & CStr(lngTemp)
lngTemp = arrbytSID(19)
lngTemp = lngTemp * 256 + arrbytSID(18)
lngTemp = lngTemp * 256 + arrbytSID(17)
lngTemp = lngTemp * 256 + arrbytSID(16)
HexSIDToDec = HexSIDToDec & "-" & CStr(lngTemp)
lngTemp = arrbytSID(23)
lngTemp = lngTemp * 256 + arrbytSID(22)
lngTemp = lngTemp * 256 + arrbytSID(21)
lngTemp = lngTemp * 256 + arrbytSID(20)
HexSIDToDec = HexSIDToDec & "-" & CStr(lngTemp)
If (UBound(arrbytSID) > 23) Then
lngTemp = arrbytSID(27)
lngTemp = lngTemp * 256 + arrbytSID(26)
lngTemp = lngTemp * 256 + arrbytSID(25)
lngTemp = lngTemp * 256 + arrbytSID(24)
HexSIDToDec = HexSIDToDec & "-" & CStr(lngTemp)
End If
End Function
Function OctetToHexStr(ByVal arrbytOctet)
' Function to convert OctetString (byte array) to Hex string.
Dim k
OctetToHexStr = ""
For k = 1 To Lenb(arrbytOctet)
OctetToHexStr = OctetToHexStr & Right("0" & Hex(Ascb(Midb(arrbytOctet, k, 1))), 2)
Next
End Function