Что нового

Работа с локальными пользователями системы через COM объекты

ynbIpb

Скриптер
Сообщения
399
Репутация
109
Интересуют все возможные манипуляции с пользователями через КОМ объекты.
Что уже нарыл на инглиш форуме:
Код:
; создание пользователя
$UserName = "New_User"
$Password = "1"
$strComputer = @ComputerName
$objUser = ObjGet("WinNT://" & $strComputer & "/" & $UserName)
If @Error then
    $colAccounts = ObjGet("WinNT://" & $strComputer & "")
    $objUser = $colAccounts.Create("user", $UserName)
    $objUser.SetPassword ($Password)
    $objUser.Put ("Fullname", "New_User"); полное имя пользователя
    $objUser.Put ("Description", "New_User description"); описание пользователя
    $objUser.SetInfo
EndIf

;Включение опции "Срок действия пароля не ограничен" 
Const $ADS_UF_DONT_EXPIRE_PASSWD = 0X10000
$oldFlags = $objUser.Get("UserFlags")
$newFlags = BitOR($oldFlags,$ADS_UF_DONT_EXPIRE_PASSWD)
$objUser.Put ("UserFlags", $newFlags) ;expire the password
$objUser.SetInfo

;Добавление пользователя в группу
$objGroup = ObjGet("WinNT://" & $strComputer & "/Администраторы,group")
$objGroup.Add($objUser.ADsPath)


В данный момент интересуют:
1. Как получить список имеющихся пользователей
2. Как получить список имеющихся групп

Также Если есть какието другие операции, выкладывайте.

з.ы.
вот тут есть хитрые скрипты, на чужом языке
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
ynbIpb [?]
наверное нет языка ближе чем VBS к AutoIt. так что перевести не составит труда


Добавлено:
Сообщение автоматически объединено:

к примеру, вот перевод скрипта для получения локальных пользователей
Код:
$objNetwork = ObjCreate("WScript.NetWork")
$strComputer = $objNetwork.ComputerName
$colAccounts = ObjGet("WinNT://" & $strComputer & "")
Dim $aFilter[1] = ['user']
$colAccounts.Filter = $aFilter
$sUsers = ''
For $objUser in $colAccounts
    $sUsers &= $objUser.Name & @CRLF
Next
ConsoleWrite($sUsers)


Вот пример с перечислением групп
Код:
$strComputer = "."
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\cimv2")
$colItems = $objWMIService.ExecQuery("Select * from Win32_Group  Where LocalAccount = True")
$sResult = ''
For $objItem in $colItems
    ;$sResult &= "Caption: " & $objItem.Caption & @CRLF
    ;$sResult &= "Description: " & $objItem.Description & @CRLF
    ;$sResult &= "Domain: " & $objItem.Domain & @CRLF
    ;$sResult &= "Local Account: " & $objItem.LocalAccount & @CRLF
    $sResult &= "Name: " & $objItem.Name & @CRLF
    ;$sResult &= "SID: " & $objItem.SID & @CRLF
    ;$sResult &= "SID Type: " & $objItem.SIDType & @CRLF
    ;$sResult &= "Status: " & $objItem.Status & @CRLF
Next
MsgBox(0, '', $sResult)
 
Автор
ynbIpb

ynbIpb

Скриптер
Сообщения
399
Репутация
109
Kaster, спасибо. отлично работает! (странно вывод пользователей на Win7 отрабатывает очень долго)
madmasles, спасибо за утилитку, но что-то она видать староватся и падает на Win7. Мне не совсем понятно как ей пользоваться (туго у меня со всем этим делом). Чем отличается COM от WMI?
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
ynbIpb
насколько долго? на хп у меня 5 сек
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
ynbIpb
Специально проверил на Win-7 32. Нормально работает. Надо от админа ее запускать.
 
Автор
ynbIpb

ynbIpb

Скриптер
Сообщения
399
Репутация
109
в обычном режиме - 6.77 сек
правой кнопкой от Администратора - 6.76 сек
НУ не столь важно.

В XP мгновенно срабатывает - 0.02 сек

madmasles [?]
Специально проверил на Win-7 32. Нормально работает. Надо от админа ее запускать.
Ну в смысле запускаться то запускается, выбираю в первом списке что-то, выбираю во втором что-то и вылетает ошибка. Ну и ладно мне ума не хватит разобраться во всём этом.

-------------- updated --------------
Что я нарыл:
Local account UDF Manage local user accounts and groups

_AccountAddToGroup
_AccountChangePassword
_AccountCreate
_AccountDelete
_AccountDisableProperty
_AccountEnableProperty
_AccountEnum
_AccountEnumGroups
_AccountExists
_AccountIsMember
_AccountRemoveFromGroup
_AccountRename
_AccountSetExpirationDate
_AccountSetInfo
_AccountSetPassword
_GroupCreate
_GroupDelete
_GroupEnum
_GroupEnumMembers
_GroupExists
_GroupRename
_GroupSetInfo
 
Верх