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

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 off
if \{%1\}==\{\} @echo Syntax: GetUserSID SID&goto :EOF
if exist "%TEMP%\GetUserSID.VBS" goto getit
@echo.Set 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"
:getit
set %1=NONE
for /f "Tokens=*" %%a in ('cscript //nologo "%TEMP%\GetUserSID.VBS"') do (
 set %1=%%a
)


Please or Register to post comments.

Upcoming Training

Mastering System Center 2012

During over 6 hours of training you can join John Savill from your computer as he will walk you through the key components and capabilities of System Center 2012, what’s involved in using the components, and the benefit they can bring to your environment.

Register Now

Current Issue

May 2013 - The NameTranslate object is useful when you need to translate Active Directory object names between different formats, but it's awkward to use from PowerShell. Here's a PowerShell script that eliminates the awkwardness.

CURRENT ISSUE / ARCHIVE / SUBSCRIBE

Windows Forums

Get answers to questions, share tips, and engage with the Windows Community in our Forums.