Войти

Показать полную графическую версию : [решено] Определение наличия прав в Windows 7 у текущего пользователя


TERMINAL
04-06-2013, 13:08
Здравствуйте, нужно узнать (через реестр или другими методами), какие права имеет текущий пользователь работающий в системе (административные или другие) если скрипт работает без #RequireAdmin. Реально ? Заранее спасибо.

madmasles
04-06-2013, 14:27
TERMINAL,
Это?IsAdmin (http://autoit-script.ru/autoit3_docs/functions/IsAdmin.htm)()

TERMINAL
04-06-2013, 15:25
madmasles, У меня включён UAC и скрипт стартует без #RequireAdmin, а IsAdmin() всегда, в таком случае, выдаёт ответ 0 (нуль) под любыми правами. Есть ещё идейки ?

Iska
04-06-2013, 19:31
TERMINAL, и что не так? Разве не это Вы хотели получить?

madmasles
04-06-2013, 20:05
TERMINAL,
А если так? У меня работает. ConsoleWrite (http://autoit-script.ru/autoit3_docs/functions/ConsoleWrite.htm)(_WinAPI_IsUserAdmin() & @LF (http://autoit-script.ru/autoit3_docs/macros.htm#@lf))

Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) _WinAPI_IsUserAdmin()
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $a_Res = DllCall (http://autoit-script.ru/autoit3_docs/functions/DllCall.htm)('setupapi.dll', 'bool', 'IsUserAdmin')
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) @error (http://autoit-script.ru/autoit3_docs/macros.htm#@error) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) SetError (http://autoit-script.ru/autoit3_docs/functions/SetError.htm)(1, 0, -1)
Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) $a_Res[0]
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc) ;==>_WinAPI_IsUserAdmin
У меня включён UAC и скрипт стартует без #RequireAdmin, а IsAdmin() всегда, в таком случае, выдаёт ответ 0 (нуль) под любыми правами. »У меня также включен UAC, и скрипт стартует без #RequireAdmin, но IsAdmin() возвращает 1.

TERMINAL
05-06-2013, 10:48
madmasles, тоже возврат 0 под админ-правами, а если запустить от имени администратора-тогда 1... (этот вариант не подходит))
Суть какая-узнать, без всяких запросов и подтверждений запуска файла, наличие прав у текущего пользователя. Если это права Администратора, тогда управление передаётся другому файлу (в котором уже срабатывает #RequireAdmin) и пользователь подтверждает его выполнение. Если же пользователь обыкновенный, то нечего даже и стартовать т.к. даже запуск от прав Администратора ни к чему хорошему не приведёт (скрипт у меня нормально работает только под админ-правами). И вот этот файл (который определяет наличие прав) находится в автозагрузке-не охота чтобы он каждый раз спрашивал разрешение на запуск если у пользователя нет прав.

TERMINAL
21-06-2013, 10:09
Помог скрипт
$sUser = @UserName

$objADSI=ObjGet("WinNT://./"&$sUser)
$obj = $objADSI.Groups
$temp = ""
For $element In $obj
$temp &= $element.Name & @CRLF
Next
MsgBox(0, "Членство в группах", "Пользователь <" & $sUser & "> принадлежит к группе:" & @CRLF & $temp)

#include <Array.au3>
$sStartUser = @UserName
MsgBox(0, "Запуск от имени", "Пользователь: " & $sStartUser & @CRLF & "Группа: " & GroupInfo($sStartUser))

Dim $Array[1]
$Container=ObjGet("WinNT://.")
_ArrayAdd( $Array,"User")
$Container.Filter = $Array
$Info = ""
For $User in $Container
$users_d = $User.Name
$sUser = $User.Name
$Info &= "Пользователь: " & $users_d & " ::: Группа: " & GroupInfo($sUser) & @CRLF
Next
MsgBox(0, "Пользователи и группы", $Info)

Func GroupInfo($sUser)
$objADSI=ObjGet("WinNT://./"&$sUser)
$obj = $objADSI.Groups
$InfoGroup = ""
For $element In $obj
$InfoGroup &= $element.Name
Next
If $InfoGroup = "" Then
$InfoGroup = "Нет группы"
EndIf
Return $InfoGroup
EndFunc
правда, чуть подкорректировал и улучшил под себя.

-TRM-
15-05-2014, 19:56
На Windows 8.1 варианты от madmasles и TERMINAL уже не работают. Есть варианты ?




© OSzone.net 2001-2012