Q. How can I set an environment variable to a user's domain SID, using standard commands?

Jerold Schulman

December 21, 2006

2 Min Read
ITPro Today logo

I have scripted GetUserSID.bat to return the current user's domain SID.

The syntax for using GetUserSID.bat is:

[call GetUserSID SID

Where SID is a call directed environment variable that will contain the user's domain SID.

GetUserSID.bat contains:

@echo offif {%1}=={} @echo Syntax: GetUserSID SID&goto :EOFif exist "%TEMP%GetUserSID.VBS" goto [email protected] WshShell = Wscript.CreateObject("Wscript.Shell") >"%TEMP%GetUserSID.VBS"@echo.Set oADinfo = createobject("ADSystemInfo") >>"%TEMP%GetUserSID.VBS"@echo.strUserAdPath = oADinfo.userName >>"%TEMP%GetUserSID.VBS"@echo.Set objADObject = GetObject("LDAP://" ^& strUserAdPath) >>"%TEMP%GetUserSID.VBS"@echo.tempsid = objADobject.objectsid >>"%TEMP%GetUserSID.VBS"@echo.hexsid = OctetToHexStr(tempsid) >>"%TEMP%GetUserSID.VBS"@echo.decsid = HexStrToDecStr(hexsid) >>"%TEMP%GetUserSID.VBS"@echo.Wscript.Echo decsid >>"%TEMP%GetUserSID.VBS"@echo.Wscript.Quit >>"%TEMP%GetUserSID.VBS"@echo.Function OctetToHexStr(arrbytOctet) >>"%TEMP%GetUserSID.VBS"@echo.  Dim k >>"%TEMP%GetUserSID.VBS"@echo.  OctetToHexStr = "" >>"%TEMP%GetUserSID.VBS"@echo.  For k = 1 To Lenb(arrbytOctet) >>"%TEMP%GetUserSID.VBS"@echo.    OctetToHexStr = OctetToHexStr _ >>"%TEMP%GetUserSID.VBS"@echo.      ^& Right("0" ^& Hex(Ascb(Midb(arrbytOctet, k, 1))), 2) >>"%TEMP%GetUserSID.VBS"@echo.  Next >>"%TEMP%GetUserSID.VBS"@echo.End Function >>"%TEMP%GetUserSID.VBS"@echo.Function HexStrToDecStr(strSid) >>"%TEMP%GetUserSID.VBS"@echo.  Dim arrbytSid, lngTemp, j >>"%TEMP%GetUserSID.VBS"@echo.  ReDim arrbytSid(Len(strSid)/2 - 1) >>"%TEMP%GetUserSID.VBS"@echo.  For j = 0 To UBound(arrbytSid) >>"%TEMP%GetUserSID.VBS"@echo.    arrbytSid(j) = CInt("&H" ^& Mid(strSid, 2*j + 1, 2)) >>"%TEMP%GetUserSID.VBS"@echo.  Next >>"%TEMP%GetUserSID.VBS"@echo.  HexStrToDecStr = "S-" ^& arrbytSid(0) ^& "-" _ >>"%TEMP%GetUserSID.VBS"@echo.    ^& arrbytSid(1) ^& "-" ^& arrbytSid(8) >>"%TEMP%GetUserSID.VBS"@echo.  lngTemp = arrbytSid(15) >>"%TEMP%GetUserSID.VBS"@echo.  lngTemp = lngTemp * 256 + arrbytSid(14) >>"%TEMP%GetUserSID.VBS"@echo.  lngTemp = lngTemp * 256 + arrbytSid(13) >>"%TEMP%GetUserSID.VBS"@echo.  lngTemp = lngTemp * 256 + arrbytSid(12) >>"%TEMP%GetUserSID.VBS"@echo.  HexStrToDecStr = HexStrToDecStr ^& "-" ^& CStr(lngTemp) >>"%TEMP%GetUserSID.VBS"@echo.  lngTemp = arrbytSid(19) >>"%TEMP%GetUserSID.VBS"@echo.  lngTemp = lngTemp * 256 + arrbytSid(18) >>"%TEMP%GetUserSID.VBS"@echo.  lngTemp = lngTemp * 256 + arrbytSid(17) >>"%TEMP%GetUserSID.VBS"@echo.  lngTemp = lngTemp * 256 + arrbytSid(16) >>"%TEMP%GetUserSID.VBS"@echo.  HexStrToDecStr = HexStrToDecStr ^& "-" ^& CStr(lngTemp) >>"%TEMP%GetUserSID.VBS"@echo.  lngTemp = arrbytSid(23) >>"%TEMP%GetUserSID.VBS"@echo.  lngTemp = lngTemp * 256 + arrbytSid(22) >>"%TEMP%GetUserSID.VBS"@echo.  lngTemp = lngTemp * 256 + arrbytSid(21) >>"%TEMP%GetUserSID.VBS"@echo.  lngTemp = lngTemp * 256 + arrbytSid(20) >>"%TEMP%GetUserSID.VBS"@echo.  HexStrToDecStr = HexStrToDecStr ^& "-" ^& CStr(lngTemp) >>"%TEMP%GetUserSID.VBS"@echo.  lngTemp = arrbytSid(25) >>"%TEMP%GetUserSID.VBS"@echo.  lngTemp = lngTemp * 256 + arrbytSid(24) >>"%TEMP%GetUserSID.VBS"@echo.  HexStrToDecStr = HexStrToDecStr ^& "-" ^& CStr(lngTemp) >>"%TEMP%GetUserSID.VBS"@echo.End Function >>"%TEMP%GetUserSID.VBS":getitset %1=NONEfor /f "Tokens=*" %%a in ('cscript //nologo "%TEMP%GetUserSID.VBS"') do ( set %1=%%a)


Sign up for the ITPro Today newsletter
Stay on top of the IT universe with commentary, news analysis, how-to's, and tips delivered to your inbox daily.

You May Also Like