sss
Продвинутый
- Сообщения
- 332
- Репутация
- 96
AutoIt: 3.3.8.1
Версия: 2.6
Категория: Администратирование, Система
Описание:
Библиотека для работы (добавление, удаление, установка параметров) с пользователями (учетными записями) Windows. Делал для себя, решил выложить, может пригодится. Использует net user и net localgroup.
Все функции работают в русской и английской версиях WinXP и Win7.
Большое спасибо Yuriy за пост
Справка по функциям находится в самом файле UDF - просто введите в поиск имя функции.
Код/Пример:
Файл: AU3 (сама UDF)
Патч для SciTE - подсветка функций и подсказки (EXE)
Снимок:
есть но не покажу
История версий:
Источник: _WinUser - работа с пользователями Windows
Автор(ы): Sky-WaLkeR
Версия: 2.6
Категория: Администратирование, Система
Описание:
Библиотека для работы (добавление, удаление, установка параметров) с пользователями (учетными записями) Windows. Делал для себя, решил выложить, может пригодится. Использует net user и net localgroup.
Все функции работают в русской и английской версиях WinXP и Win7.
Большое спасибо Yuriy за пост
Справка по функциям находится в самом файле UDF - просто введите в поиск имя функции.
_WinUser_Add - создает учетную запись
_WinUser_AddToGroup - добавляет пользователя в группу
_WinUser_CreateGroup - создает группу
_WinUser_Delete - удаляет пользователя
_WinUser_DeleteGroup - удаляет группу
_WinUser_GetAll - возвращает в массиве все параметры учетной записи
_WinUser_GetAllNames - возвращает массив всех учетных записей
_WinUser_GetComment - возвращает комментарий
_WinUser_GetCountryCode - возвращает код страны
_WinUser_GetCountryName - возвращает имя страны
_WinUser_GetFullName - возвращает полное имя
_WinUser_GetLastLoginTime - возвращает время последнего входа
_WinUser_GetSID - возвращает SID (спасибо VladUs)
_WinUser_IsActive - проверяет активность
_WinUser_IsAdmin - проверяет админ. права
_WinUser_RemoveFromGroup - удаляет пользователя из группы
_WinUser_SetAll - устанавливает все параметры учетной записи
_WinUser_SetActive - активирует/деактивирует
_WinUser_SetAdmin - ставит/убирает админ. права
_WinUser_SetComment - ставит комментарий
_WinUser_SetCountryCode - ставит код страны
_WinUser_SetFullName - ставит полное имя
_WinUser_SetLoginScript - ставит путь до сценария входа
_WinUser_SetPassword - ставит/убирает пароль
В планах:
Список пользователей, установка даты истечения учетной записи, установка домашней директории, получение списка групп, в которых состоит пользователь, тесты на Windows 8
_WinUser_AddToGroup - добавляет пользователя в группу
_WinUser_CreateGroup - создает группу
_WinUser_Delete - удаляет пользователя
_WinUser_DeleteGroup - удаляет группу
_WinUser_GetAll - возвращает в массиве все параметры учетной записи
_WinUser_GetAllNames - возвращает массив всех учетных записей
_WinUser_GetComment - возвращает комментарий
_WinUser_GetCountryCode - возвращает код страны
_WinUser_GetCountryName - возвращает имя страны
_WinUser_GetFullName - возвращает полное имя
_WinUser_GetLastLoginTime - возвращает время последнего входа
_WinUser_GetSID - возвращает SID (спасибо VladUs)
_WinUser_IsActive - проверяет активность
_WinUser_IsAdmin - проверяет админ. права
_WinUser_RemoveFromGroup - удаляет пользователя из группы
_WinUser_SetAll - устанавливает все параметры учетной записи
_WinUser_SetActive - активирует/деактивирует
_WinUser_SetAdmin - ставит/убирает админ. права
_WinUser_SetComment - ставит комментарий
_WinUser_SetCountryCode - ставит код страны
_WinUser_SetFullName - ставит полное имя
_WinUser_SetLoginScript - ставит путь до сценария входа
_WinUser_SetPassword - ставит/убирает пароль
В планах:
Код/Пример:
Код:
#include "WinUser.au3"
$productname = 'WinUser Example'
$name = 'я_русский'
$comment = 'я_русский_комментарий'
$group = 'MegaTestGroup'
MsgBox(0, $productname, 'Получение списка пользователей')
$ret = _WinUser_GetAllNames()
$string = ''
For $i = 1 To $ret[0]
$string = $string & @CRLF & 'Пользователь ' & $i & ': ' & $ret[$i]
Next
MsgBox(0, $productname, 'Список пользователей:' & $string)
MsgBox(0, $productname, 'Создание пользователя ' & $name)
$ret = _WinUser_Add($name)
If $ret = 1 Then
MsgBox(0, $productname, 'Создание выполнено успешно!')
Else
MsgBox(0, $productname, 'Где-то ошибка! Выхожу...')
Exit
EndIf
MsgBox(0, $productname, 'Деактивирование пользователя ' & $name & ' (делаем неактивным)')
$ret = _WinUser_SetActive($name, 0)
If $ret = 1 Then
MsgBox(0, $productname, 'Деактивирование выполнено успешно!')
Else
MsgBox(0, $productname, 'Где-то ошибка! Выхожу...')
Exit
EndIf
MsgBox(0, $productname, 'Создание группы ' & $group)
$ret = _WinUser_CreateGroup($group)
If $ret = 1 Then
MsgBox(0, $productname, 'Создание выполнено успешно!')
Else
MsgBox(0, $productname, 'Где-то ошибка! Выхожу...')
Exit
EndIf
MsgBox(0, $productname, 'Добавление пользователя ' & $name & ' в группу ' & $group)
$ret = _WinUser_AddToGroup($name, $group)
If $ret = 1 Then
MsgBox(0, $productname, 'Добавление выполнено успешно!')
Else
MsgBox(0, $productname, 'Где-то ошибка! Выхожу...')
Exit
EndIf
MsgBox(0, $productname, 'Добавляем комментарий "' & $comment & '" для пользователя ' & $name)
$ret = _WinUser_SetComment($name, $comment)
If $ret = 1 Then
MsgBox(0, $productname, 'Добавление выполнено успешно!')
Else
MsgBox(0, $productname, 'Где-то ошибка! Выхожу...')
Exit
EndIf
MsgBox(0, $productname, 'Информация о пользователе ' & $name)
$ret = _WinUser_GetAll($name)
MsgBox(0, $productname, 'Пользователь ' & $name & @CRLF & _
'Полное имя: ' & $ret[0] & @CRLF & _
'Комментарий: ' & $ret[1] & @CRLF & _
'Администратор?: ' & $ret[2] & @CRLF & _
'Активен?: ' & $ret[3] & @CRLF & _
'Код страны: ' & $ret[4] & @CRLF & _
'Название страны: ' & $ret[5] & @CRLF)
MsgBox(0, $productname, 'Удаление пользователя ' & $name & ' из группы ' & $group)
$ret = _WinUser_RemoveFromGroup($name, $group)
If $ret = 1 Then
MsgBox(0, $productname, 'Удаление выполнено успешно!')
Else
MsgBox(0, $productname, 'Где-то ошибка! Выхожу...')
Exit
EndIf
MsgBox(0, $productname, 'Удаление группы ' & $group)
$ret = _WinUser_DeleteGroup($group)
If $ret = 1 Then
MsgBox(0, $productname, 'Удаление выполнено успешно!')
Else
MsgBox(0, $productname, 'Где-то ошибка! Выхожу...')
Exit
EndIf
MsgBox(0, $productname, 'Удаление пользователя ' & $name)
$ret = _WinUser_Delete($name)
If $ret = 1 Then
MsgBox(0, $productname, 'Удаление выполнено успешно!')
Else
MsgBox(0, $productname, 'Где-то ошибка! Выхожу...')
Exit
EndIf
Файл: AU3 (сама UDF)
Патч для SciTE - подсветка функций и подсказки (EXE)
Раньше патч не работал - прошу прощения за неудобства. Теперь все хорошо
Этот патч редактирует 2 файла - au3.user.calltips.api и au3.keywords.properties. Функции будут подсвечиваться (как, например, функции библиотеки _WinAPI), а также будут появляться подсказки. Старался сделать его универсальным. Сначала он пытается найти SciTE по стандартному пути, если не находит - предлагает указать. При обновлении библиотеки Файлы восстанавливать не нужно - запускаете обновленный патч, и он добавит или удалит нужные строки. Если вдруг что-то пошло не так Вы всегда сможете восстановить эти файлы, так как патч создает их бекап (%файл%.backup). Для удобства - по ссылке качается EXE-файл. Исходный код представлен ниже:
Этот патч редактирует 2 файла - au3.user.calltips.api и au3.keywords.properties. Функции будут подсвечиваться (как, например, функции библиотеки _WinAPI), а также будут появляться подсказки. Старался сделать его универсальным. Сначала он пытается найти SciTE по стандартному пути, если не находит - предлагает указать. При обновлении библиотеки Файлы восстанавливать не нужно - запускаете обновленный патч, и он добавит или удалит нужные строки. Если вдруг что-то пошло не так Вы всегда сможете восстановить эти файлы, так как патч создает их бекап (%файл%.backup). Для удобства - по ссылке качается EXE-файл. Исходный код представлен ниже:
Код:
#include <Array.au3>
$scite_path = @ProgramFilesDir & '\AutoIt3\SciTE'
If Not FileExists($scite_path & '\scite.exe') Then
$scite = FileSelectFolder('Укажите путь до папки SciTE', "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}", 2)
If $scite = '' Then Exit
EndIf
$calltips_file = $scite_path & '\api\au3.user.calltips.api'
$keywords_file = $scite_path & '\Properties\au3.keywords.properties'
FileCopy($calltips_file, $calltips_file & '.backup', 1)
FileCopy($keywords_file, $keywords_file & '.backup', 1)
; ==== usercalltips
Dim $calltips[24] = ['_WinUser_Add(имя, [ пароль="",[ админ?=0,[ активна?=1,[ полное имя=имя,[ коммент.="",[ может менять пароль?=1]]]]]]) Создает новую учетную запись. <WinUser.au3>', _
'_WinUser_AddToGroup(имя, группа) Добавляет пользователя в группу. <WinUser.au3>', _
'_WinUser_CreateGroup(группа) Создает группу. <WinUser.au3>', _
'_WinUser_Delete(имя) Удаляет учетную запись. <WinUser.au3>', _
'_WinUser_DeleteFromGroup(имя, группа) Удаляет пользователя из группы. <WinUser.au3>', _
'_WinUser_DeleteGroup(группа) Удаляет группу. <WinUser.au3>', _
'_WinUser_GetAll(имя) Возвращает в массиве информацию о пользователе. <WinUser.au3>', _
'_WinUser_GetAllNames() Возвращает все учетные записи в массиве. <WinUser.au3>', _
'_WinUser_GetComment(имя) Возвращает комментарий к учетной записи. <WinUser.au3>', _
'_WinUser_GetCountryCode(имя) Возвращает код страны учетной записи. <WinUser.au3>', _
'_WinUser_GetCountryName(имя) Возвращает имя страны учетной записи. <WinUser.au3>', _
'_WinUser_GetFullName(имя) Возвращает полное имя учетной записи. <WinUser.au3>', _
'_WinUser_GetLastLoginTime(имя) Возвращает дату входа учетной записи (формат - дд.мм.гг чч.мм). <WinUser.au3>', _
'_WinUser_GetSID(имя) Возвращает SID учетной записи. <WinUser.au3>', _
'_WinUser_IsActive(имя) Проверяет активность учетной записи. <WinUser.au3>', _
'_WinUser_IsAdmin(имя) Проверяет права учетной записи. <WinUser.au3>', _
'_WinUser_SetAll(имя, [пароль="", [$админ?=0, [активен?=1, [полное имя="", [коммент.="", [может менять пароль?=1 ]]]]]]) Настраивает учетную запись пользователя. <WinUser.au3>', _
'_WinUser_SetActive(имя, активна?) Ставит активность учетной записи. <WinUser.au3>', _
'_WinUser_SetAdmin(имя, [админ?=1]) Ставит права учетной записи. <WinUser.au3>', _
'_WinUser_SetComment(имя, [коммент.=""]) Ставит комментарий к учетной записи. <WinUser.au3>', _
'_WinUser_SetCountryCode(имя, [код=0]) Ставит код страны учетной записи. <WinUser.au3>', _
'_WinUser_SetFullName(имя, [имя=""]) Ставит полное имя учетной записи. <WinUser.au3>', _
'_WinUser_SetLoginScript(имя, [путь=""]) Ставит путь до сценнария входа учетной записи. <WinUser.au3>', _
'_WinUser_SetPassword(имя, [пароль=""]) Ставит пароль для учетной записи. <WinUser.au3>']
$calltips_data = FileRead($calltips_file)
For $i = 0 To UBound($calltips) - 1
$regex = StringRegExp($calltips[$i], '(.*?)\(', 3)
If StringInStr($calltips_data, $regex[0]) And (Not StringInStr($calltips_data, $calltips[$i])) Then
$calltips_data = StringRegExpReplace($calltips_data, $regex[0] & '.*', $calltips[$i])
ElseIf Not StringInStr($calltips_data, $calltips[$i]) Then
$calltips_data &= @CRLF & $calltips[$i]
EndIf
Next
FileDelete($calltips_file)
FileWrite($calltips_file, $calltips_data)
; ==== keywords
Dim $keywords[24] = ['_WinUser_Add', _
'_WinUser_AddToGroup', _
'_WinUser_CreateGroup', _
'_WinUser_Delete', _
'_WinUser_DeleteFromGroup', _
'_WinUser_DeleteGroup', _
'_WinUser_GetAll', _
'_WinUser_GetAllNames', _
'_WinUser_GetComment', _
'_WinUser_GetCountryCode', _
'_WinUser_GetCountryName', _
'_WinUser_GetFullName', _
'_WinUser_GetLastLoginTime', _
'_WinUser_GetSID', _
'_WinUser_IsActive', _
'_WinUser_IsAdmin', _
'_WinUser_SetAll', _
'_WinUser_SetActive', _
'_WinUser_SetAdmin', _
'_WinUser_SetComment', _
'_WinUser_SetCountryCode', _
'_WinUser_SetFullName', _
'_WinUser_SetLoginScript', _
'_WinUser_SetPassword']
$keywords_data = FileRead($keywords_file)
$udfs_old = StringRegExp($keywords_data, '(?s)au3.keywords.udfs=(.*?)au3.keywords.keywords', 3)
$udfs_old = $udfs_old[0]
$udfs = StringStripWS(StringRegExpReplace($udfs_old, '\\| |_winuser_\w{1,20}|' & @CRLF, ''), 4)
$arr = StringSplit($udfs, ' ')
For $i = 0 To UBound($keywords) - 1
If _ArraySearch($arr, StringLower($keywords[$i])) = -1 Then $udfs &= ' ' & StringLower($keywords[$i])
Next
$udfs_split = StringSplit($udfs, ' ')
$cnt = 0
$data = ''
For $i = 1 To $udfs_split[0]
$data &= $udfs_split[$i] & ' '
$cnt += 1
If $cnt = 6 Then
$data &= '\' & @CRLF & @TAB
$cnt = 0
EndIf
Next
$part1 = StringRegExp($keywords_data, '(?s)(.*?)au3.keywords.udfs=', 3)
$part1 = $part1[0]
$part2 = StringRegExp($keywords_data, '(?s)au3.keywords.keywords=(.*)', 3)
$part2 = $part2[0]
$data = $part1 & 'au3.keywords.udfs=' & $data & @CRLF & 'au3.keywords.keywords=' & $part2
FileDelete($keywords_file)
FileWrite($keywords_file, $data)
MsgBox(64, '_WinUser Highlighter', 'Операция успешно завершена!' & @CRLF & 'Патч создан для UDF _WinUser версии 2.6')
Снимок:
есть но не покажу

История версий:
26.03.2011 - первый релиз (версия 1.0)
27.03.2011 - обновление (версия 1.1)
Добавлено:
_WinUser_IsActive
_WinUser_IsAdmin
Исправлено:
Мелкие баги
8.07.2011 - обновление (версия 2.0)
Добавлено:
_WinUser_GetComment
_WinUser_GetFullName
_WinUser_GetLastLoginTime
_WinUser_SetComment
Изменено:
Способ работы с консольной программой (теперь - с помощью STDIN\STDOUT потоков)
Исправлено:
Мелкие баги
9.07.2011 - обновление (версия 2.1)
Добавлено:
_WinUser_GetSID от VladUs
Удалил пару лишних строк
11.07.2011 - обновление (версия 2.2)
Добавлено:
_WinUser_GetAllNames
_WinUser_GetCountryCode
_WinUser_GetCountryName
_WinUser_SetCountryCode
_WinUser_SetFullName
_WinUser_SetLoginScript
Изменено:
_WinUser_Add (небольшие изменения)
19.10.2011 - обновление (версия 2.3)
Добавлено:
_WinUser_GetAll - возвращает все параметры учетной записи в массиве
_WinUser_SetAll - устанавливает все параметры учетной записи
Поддержка английской версии Windows, автоматическое распознавание локали
Исправлено:
Ошибка в _WinUser_Add при создании пользователя без админских прав
Ошибка в патче для SCiTE
Немного почистил код
14.04.2012 - обновление (версия 2.4)
Добавлено:
_WinUser_AddToGroup - добавляет пользователя в группу
_WinUser_RemoveFromGroup - удаляет пользователя из группы
_WinUser_CreateGroup - создает группу
_WinUser_DeleteGroup - удаляет группу
Описание ко всем новым функциям и к ..._GetAll
Расширенный пример с MsgBox
Исправлено:
5 ошибок в коде (кавычки)
патч -теперь полностью рабочий, проверено на себе
15.08.2013 - обновление (версия 2.5)
Изменено:
Мелкие баги
Патч теперь полностью работает (и обладает некоторыми приятными плюшками...)
Небольшие изменения кода (уменьшен размер, удалены лишние переменные)
Исправлено:
Ошибка в SetAdmin при удалении прав администратора
Ошибка в SetLoginScript (был шанс, что функция всегда возвращала бы ошибку)
Ошибка в SetAll при удалении прав администратора
Ошибка в SetAll при возникновении ошибки (мог удалить учетную запись)
17.08.2013 - обновление (версия 2.6)
Добавлено:
Поддержка кириллицы во всех полях - имя, пароль, комментарий etc (нужны тесты!)
Изменено:
Для следующих функций второй параметр теперь опционален:
_WinUser_SetActive
_WinUser_SetAdmin
_WinUser_SetComment
_WinUser_SetCountryCode
_WinUser_SetLoginScript
Почти полностью переписаны функции _WinUser_GetAll, _WinUser_GetAllNames, _WinUser_GetFullName и _WinUser_GetComment
Исправлено:
_WinUser_SetComment всегда возвращал ошибку
_WinUser_GetAll, _WinUser_GetFullName и _WinUser_GetComment обрезали длинные комментарии и имена файлов
27.03.2011 - обновление (версия 1.1)
Добавлено:
_WinUser_IsActive
_WinUser_IsAdmin
Исправлено:
Мелкие баги
8.07.2011 - обновление (версия 2.0)
Добавлено:
_WinUser_GetComment
_WinUser_GetFullName
_WinUser_GetLastLoginTime
_WinUser_SetComment
Изменено:
Способ работы с консольной программой (теперь - с помощью STDIN\STDOUT потоков)
Исправлено:
Мелкие баги
9.07.2011 - обновление (версия 2.1)
Добавлено:
_WinUser_GetSID от VladUs
Удалил пару лишних строк
11.07.2011 - обновление (версия 2.2)
Добавлено:
_WinUser_GetAllNames
_WinUser_GetCountryCode
_WinUser_GetCountryName
_WinUser_SetCountryCode
_WinUser_SetFullName
_WinUser_SetLoginScript
Изменено:
_WinUser_Add (небольшие изменения)
19.10.2011 - обновление (версия 2.3)
Добавлено:
_WinUser_GetAll - возвращает все параметры учетной записи в массиве
_WinUser_SetAll - устанавливает все параметры учетной записи
Поддержка английской версии Windows, автоматическое распознавание локали
Исправлено:
Ошибка в _WinUser_Add при создании пользователя без админских прав
Ошибка в патче для SCiTE
Немного почистил код
14.04.2012 - обновление (версия 2.4)
Добавлено:
_WinUser_AddToGroup - добавляет пользователя в группу
_WinUser_RemoveFromGroup - удаляет пользователя из группы
_WinUser_CreateGroup - создает группу
_WinUser_DeleteGroup - удаляет группу
Описание ко всем новым функциям и к ..._GetAll
Расширенный пример с MsgBox
Исправлено:
5 ошибок в коде (кавычки)
патч -
15.08.2013 - обновление (версия 2.5)
Изменено:
Мелкие баги
Патч теперь полностью работает (и обладает некоторыми приятными плюшками...)
Небольшие изменения кода (уменьшен размер, удалены лишние переменные)
Исправлено:
Ошибка в SetAdmin при удалении прав администратора
Ошибка в SetLoginScript (был шанс, что функция всегда возвращала бы ошибку)
Ошибка в SetAll при удалении прав администратора
Ошибка в SetAll при возникновении ошибки (мог удалить учетную запись)
17.08.2013 - обновление (версия 2.6)
Добавлено:
Поддержка кириллицы во всех полях - имя, пароль, комментарий etc (нужны тесты!)
Изменено:
Для следующих функций второй параметр теперь опционален:
_WinUser_SetActive
_WinUser_SetAdmin
_WinUser_SetComment
_WinUser_SetCountryCode
_WinUser_SetLoginScript
Почти полностью переписаны функции _WinUser_GetAll, _WinUser_GetAllNames, _WinUser_GetFullName и _WinUser_GetComment
Исправлено:
_WinUser_SetComment всегда возвращал ошибку
_WinUser_GetAll, _WinUser_GetFullName и _WinUser_GetComment обрезали длинные комментарии и имена файлов
Источник: _WinUser - работа с пользователями Windows
Автор(ы): Sky-WaLkeR