How do I get SID for the group using vbscript?

前端 未结 2 1452
忘掉有多难
忘掉有多难 2021-01-27 10:02

I want to get the SID of a group by input the group name and it will return the SID. Is there any way to do this using vbscript ? Any help would be great

相关标签:
2条回答
  • 2021-01-27 11:00

    I forgot where I got this but here it is:

    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
    
    0 讨论(0)
  • Use WMI for resolving the 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
    

    If you need to convert the binary SIDs used in AD I'd suggest you do something like this:

    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
    

    For more information on binary SIDs see here.

    0 讨论(0)
提交回复
热议问题