Dirk Diggler 0 Posted August 7, 2006 I need a function that returns SID of a user. I wrote this: Func GetSid($_Username) @ComputerName & '\' & $_Username & '> ' & @TempDir & '\getsid.tmp' ) FileDelete(@TempDir & '\getsid.tmp') Run(@ComSpec & ' /c "' & @ScriptDir & '\psgetsid.exe" ' & $_Username & '> ' & @TempDir & '\getsid.tmp', '', @SW_HIDE) ;MsgBox(0,'','1') [b]Sleep(50)[/b] Local $f= FileOpen(@TempDir & '\getsid.tmp',0) Local $a= FileReadLine($f,2) FileClose($f) If StringStripWS ( $a, 8) <> "" Then Return $a Return $_Username EndFunc but it works too slow because it needs a pause Share this post Link to post Share on other sites
Dirk Diggler 0 Posted August 7, 2006 Is it possible something like WinAPI? i'm not good in it.... Share this post Link to post Share on other sites
b015979 0 Posted August 8, 2006 Try this: $user=envget("username") $i=1 while 1 $var = RegEnumKey("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList",$i) $i=$i+1 if @error <> 0 Then ExitLoop $var2 = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\" & $var,"ProfileImagePath") If StringInStr($var2, $user) Then MsgBox(4096, "SID " ,"Value of Logon User " & @CRLF & $var) Else EndIf wend Share this post Link to post Share on other sites
Dirk Diggler 0 Posted August 8, 2006 it will work if profile exist. but if i want retrieve sid of a new domain user? Share this post Link to post Share on other sites
b015979 0 Posted August 8, 2006 User SID's are generated by winlogon process and are unique on each machine ! So if no profile exist the user has not logon on a machine yet and there is NO User SID (as far as i know). Share this post Link to post Share on other sites
/dev/null 2 Posted August 8, 2006 I need a function that returns SID of a user. I wrote this:but it works too slow because it needs a pause1.) You can improve the speed if you use RunWait() instead of Run(). This will eliminate the sleep, however it's unclear to me how a 50 millisecond will slow down the whole script anyway....2.) You can use WMI and with this classes: Win32_Account, Win32_UserAccount (search the forum for WMI and Scriptomatic).CheersKurt __________________________________________________________(l)user: Hey admin slave, how can I recover my deleted files?admin: No problem, there is a nice tool. It's called rm, like recovery method. Make sure to call it with the "recover fast" option like this: rm -rf * Share this post Link to post Share on other sites
bluebearr 1 Posted August 8, 2006 Try this: $Domain = EnvGet("USERDOMAIN") MsgBox(0, "SID", $Domain & "\" & @UserName & ": " & _GetSID(@UserName, $Domain)) Func _GetSID($Username, $UserDomain = '') Local $objWMIService, $objAccount If $UserDomain = '' Then $UserDomain = EnvGet("USERDOMAIN") $objWMIService = ObjGet("winmgmts:\\.\root\cimv2") $objAccount = $objWMIService.Get _ ("Win32_UserAccount.Name='" & @Username & "',Domain='" & $UserDomain & "'") Return $objAccount.SID EndFunc BlueBearrOddly enough, this is what I do for fun. Share this post Link to post Share on other sites