Цитата:
И как это можно исправить, если ты не приводишь код?
|
А никак. Надо придумать другой способ. Код вот:
Код:

Func GetSid($_Username) ;возвращает сид юзера. имя должно быть полным, все довески(домен, комп) должны быть уже переданы в функкцию
FileDelete(@TempDir & '\getsid.tmp')
Run(@ComSpec & ' /c "' & @ScriptDir & '\psgetsid.exe" ' & $_Username & '> ' & @TempDir & '\getsid.tmp', '', @SW_HIDE)
Sleep(50)
Local $f= FileOpen(@TempDir & '\getsid.tmp',0)
Local $a= FileReadLine($f,2)
FileClose($f)
If StringStripWS ( $a, 8) <> "" Then Return StringStripWS($a, 8)
Return $_Username
EndFunc
Дело в том, что эта функция используется в цикле до 2-3 тыс. раз. И обработка файлового вывода вообще не вариант, цикл будет выполняться годами. Есть вариант вот такой:
Код:

Func GetSid($UserName, $Domain)
Dim $UserSID, $oWshNetwork, $oUserAccount
$objWMIService = objGet( "winmgmts:{impersonationLevel=impersonate}!//" & @ComputerName & "/root/cimv2")
$oUserAccounts = $objWMIService.ExecQuery("Select SID from Win32_UserAccount WHERE Name = '" & $UserName & "' AND Domain = '" & $Domain & "'")
For $oUserAccount In $oUserAccounts
Return $oUserAccount.SID
next
EndFunc
Но у него свои недостатки - в функцию надо передавать отдельно имя пользователя и домен. В то время как первая функция умеет конвертировать имена в любом формате, например
user@domain.local