Что нового

[Автоматизация] Пользователи системы.

drd0s

Новичок
Сообщения
19
Репутация
2
Как получить список пользователей в системе и узнать, кто является администратором, а кто пользователем. И под кем был запущен скрипт?! :wacko:
 
Автор
drd0s

drd0s

Новичок
Сообщения
19
Репутация
2
Есть нароботки. Нашел на форме и в интернете. Переделал чуть под себя одну.
Но проблема состоит в том, как узнать какой пользователь к какой группе принадлежит. :'(
Группы:
Код:
$strComputer = "."
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\cimv2")
$colItems = $objWMIService.ExecQuery("Select * from Win32_Group  Where LocalAccount = True")
$sResult = ''
For $objItem in $colItems
    $sResult &= "Name: " & $objItem.Name & @CRLF
    $sResult &= "SID: " & $objItem.SID & @CRLF
Next
MsgBox(0, '', $sResult)


Пользователи:
Код:
$strComputer = "."
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\cimv2")
$colItems = $objWMIService.ExecQuery("Select Name,SID From Win32_UserAccount")
$sResult = ''
For $objItem in $colItems
    $sResult &= "Name: " & $objItem.Name & @CRLF
	$sResult &= "SID: " & $objItem.SID & @CRLF
Next
MsgBox(0, '', $sResult)

:-\
Необходимо автоматом определить, какие есть пользователи, узнать в какие группы они входят, и узнать под каким пользователем мы сейчас.

P.S: Yuriy ответил на один вопрос! Под каким пользователем мы сейчас, СПС.
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Закомментировал одну строку. Список пользователей.
Код:
$strComputer = "."
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\cimv2")
$colItems = $objWMIService.ExecQuery("Select Name,SID From Win32_UserAccount")
$sResult = ''
For $objItem in $colItems
    $sResult &= "Name: " & $objItem.Name & @CRLF
    ;$sResult &= "SID: " & $objItem.SID & @CRLF
Next
MsgBox(0, '', $sResult)

В командной строке Windows получить информацию о пользователе можно так
Код:
net user имя_пользователя
 
Автор
drd0s

drd0s

Новичок
Сообщения
19
Репутация
2
Зачем :blink: :laugh:
Я могу получить список пользователей и групп.… Но я не могу отнести пользователей к группам, зачем мне что-то комментировать.
Пример, мне нужно узнать, кто относится к группе Администраторы, а кто к группе Пользователи.
Как мне это сделать? Есть идеи? По SID даже не советуйте сверять, это не выйдет. :-X

Код:
net user *username*
это дополнительные затраты на парсинг и выполнение стороннего приложения.
Не пойдет =(
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Вот такой вариант.
Автоматизировать передачу имен групп в переменную $sGroup для обработки уже не стал.
Код:
;получить список групп
$strComputer = "."
$objWMIService1 = ObjGet("winmgmts:\\" & $strComputer & "\root\cimv2")
$colItems1 = $objWMIService1.ExecQuery("Select * from Win32_Group  Where LocalAccount = True")
$sResult1 = ''
For $objItem1 in $colItems1
    $sResult1 &= $objItem1.Name & @CRLF	
Next
MsgBox(0, "Groups", $sResult1)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;члены определенной группы
Call("Test", "Администраторы")
Call("Test", "Гости")
Call("Test", "Пользователи")
Call("Test", "HelpServicesGroup")

Func Test($sGroup)
$objWMIService2 = ObjGet("WinNT://./"&$sGroup&",Group")
$colItems2 = $objWMIService2.Members 
$sResult2 = ''
For $objItem2 In $colItems2
  $sResult2 &= $objItem2.Name & @CRLF
Next
MsgBox(0, $sGroup, $sResult2)
EndFunc
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Определить кем запущен скрипт + узнать к какой группе он (пользователь) принадлежит:
Код:
$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
 
Автор
drd0s

drd0s

Новичок
Сообщения
19
Репутация
2
То, что нужно! Спасибо :smile:
 
Верх