Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Как получить название группы Администраторов в переменную.

Ответить
Настройки темы
CMD/BAT - [решено] Как получить название группы Администраторов в переменную.

Аватара для volk1234

Старовер


Сообщения: 1708
Благодарности: 314


Конфигурация

Профиль | Отправить PM | Цитировать


Изменения
Автор: volk1234
Дата: 26-05-2009
Написал себе простейший скрипт для рабочих групп-
создает Учетную запись администратора с паролем.

net user USER PASS /add
и так далее.

Проблемма в том, что иногда попадается англицкая винда и группа называется Administrators, а не Администраторы.
Я сделал простейший выбор через set /p, 1-ENG 2-RUS.
Есть ли способ получить в переменную название группы Администраторы.

-------

Ю-ху!


Отправлено: 11:14, 28-03-2009

 

Аватара для volk1234

Старовер


Сообщения: 1708
Благодарности: 314

Профиль | Отправить PM | Цитировать


UserGroup допер сам сразу. RID -545
просто это будет case- скрипт - когда надо полностью ограничить юзверя -так и сделаем.
А бывают клиенты - сидит начальник отдела щеки дует - у.з. у него одна Администратор ( себя он считает как минимум продвинутым пользователем) и ничего менять он не намерен, и если не дай бог завтра у него пасьянс откажется устанавливатся- лучше мне выбрасить мобилу сразу. Тут лучше свою вторую учетку добавить.

-------

Ю-ху!


Отправлено: 00:17, 06-04-2009 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для volk1234

Старовер


Сообщения: 1708
Благодарности: 314

Профиль | Отправить PM | Цитировать


Уважаемый Petya V4sechkin !

Подскажите пожалуйста еще: почему у меня не сработала команда:

Код: Выделить весь код
:LISTADM
For /F "UseBackQ Tokens=1* Delims==" %%I In (`WMIC Group Where " SID = '%AdmGroupSID%' " Get Name /Value ^| Find "="`) Do Set AdmGroup=%%J
Set AdmGroup=%AdmGroup:~0,-1%
Echo Группа Администраторов на этом компьютере - '%AdmGroup%'
pause

For /F "Delims=" %%I In ('Net LocalGroup "%AdmGroup%"') Do Set Last=%%I
For /F "Skip=6 Delims=" %%I In ('Net LocalGroup "%AdmGroup%"') Do (
  If "%%I" Neq "%Last%" (
      Echo %%I
    )
  )
  


WMIC Group Where "SID = 'S-1-5-32-500'" Do Set Name='%AdmiGroup%'
Echo Встроеный админ %AdmiName%


pause

GOTO :EOF
Цель была распечатать список группы и ее членов с отдельной распечаткой встроенного админа.

Далее я хочу сделать тоже самое и для других групп.
конкретно не работает последняя команда для печати имени встроенного администратора...

-------

Ю-ху!


Отправлено: 03:24, 24-04-2009 | #12



Moderator


Сообщения: 53478
Благодарности: 15506

Профиль | Отправить PM | Цитировать


Цитата volk1234:
WMIC Group Where "SID = 'S-1-5-32-500'" Do Set Name='%AdmiGroup%'
Echo Встроеный админ %AdmiName%
И что это означает?
С тем же успехом можно написать случайную последовательность букв и надеяться, что она заработает...

Сначала вы хотели переименовать встроенную учетку Администратор. В 4-м посту я привел пример. Если вы переименовываете админа, то знаете новое имя (каким оно станет).

Теперь уже вы не хотите ее переименовывать, а просто выводите на экран.
Пожалуйста:
Код: Выделить весь код
Set AdmAccountRID=500
Set AdmAcc=
For /F "UseBackQ Tokens=1* Delims==" %%I In (`WMIC UserAccount Where "LocalAccount = True And SID Like 'S-1-5-%%-%AdmAccountRID%'" Get Name /Value ^| Find "="`) Do Set AdmAcc=%%J
Set AdmAcc=%AdmAcc:~0,-1%

Echo Встроеный админ: %AdmAcc%
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:44, 24-04-2009 | #13


Аватара для volk1234

Старовер


Сообщения: 1708
Благодарности: 314

Профиль | Отправить PM | Цитировать


Petya V4sechkin
Во первых спасибо за помощь.

Во вторых, то что вы приводили не пошло "в стол", просто я задумал расширить функционал скрипта и ввести для удобства вывод груп и пользователей в консоли -
эдакая замена консоли mmc. Может я и изобретаю велосипед и это (вывод всех груп и всех пользователей по группам) можно сделать 1й коммандой, но мне стало интересно это сделать.

Правда я упорно не могу найти справки по wmic, а нахрапом логику я не могу понять.
Вот приведенный вами пример в предыдущем посте. Я копирую ваш скрипт меняю RID на 545
и выдается ошибка - отсуствуют экземпляры класса.
И когда применяется SID=1-5-32-500, а когда SID Like '1-5-%%-%env%' ????

-------

Ю-ху!


Последний раз редактировалось volk1234, 26-05-2009 в 18:15.


Отправлено: 16:14, 24-04-2009 | #14



Moderator


Сообщения: 53478
Благодарности: 15506

Профиль | Отправить PM | Цитировать


Цитата volk1234:
Правда я упорно не могу найти справки по wmic
Пуск -> Справка и поддержка -> Найти -> WMIC
Там общие сведения о синтаксисе, командах. Например, GET - получение свойств (Properties), CALL - выполнение метода (Method). Что касается списка классов, вот полный перечень на MSDN. Например, псевдоним UserAccount соответствует классу Win32_UserAccount, а Group - Win32_Group.

Еще ссылки:
Доступ к WMI из командной строки. Командная оболочка WMIC
Командная строка инструментария управления Windows (WMIC)

Цитата volk1234:
Я копирую ваш скрипт меняю RID на 545
Что такое 545, можете сказать?
Статью KB243330 внимательно читали?
Чувствуете разницу между Group и UserAccount?

Цитата volk1234:
И когда применяется SID=1-5-32-500
Не существует такого SID. Еще раз в статью KB243330.
Цитата KB243330:
  • SID: S-1-5-домен-500
    Название: Администратор
Это учетная запись, UserAccount.
Курсивом выделенное домен - это буквы/цифры из SID домена или компьютера (уникальные для каждого компьютера). Значит, для получения имени встроенной учетки Администратор достаточно найти такой UserAccount, у которого SID = S-1-5-любая_последовательность_символов-500. В языке запросов SQL (или WQL) это делается оператором LIKE (любая последовательность задается спецсимволом "%" (процент)) в условии WHERE:
Код: Выделить весь код
LocalAccount = True And SID Like 'S-1-5-%-500'
LocalAccount нужно, если комп в домене (чтобы выбиралась только локальная учетка). Примем во внимание, что в батнике символ "%" также является специальным, для его экранирования нужно продублировать: %%.
Надеюсь, теперь вам понятно, как формируется условие WHERE в 13-м посту?

Цитата KB243330:
  • SID: S-1-5-32-545
    Название: Пользователи
Это группа, Group.
Никаких уникальных букв/цифр здесь нет. Значит, условие поиска упрощается (LIKE не нужен).

P. S. Надеюсь, что все понятно (еще раз такие полотна писать не хочется).
P. P. S. Для иллюстрации вышесказанного выполните батник (и сравните команды):
Код: Выделить весь код
@Echo Off

WMIC Group Where "LocalAccount = True And SID = 'S-1-5-32-545'" Get Name, SID /Value
WMIC UserAccount Where "LocalAccount = True And SID Like 'S-1-5-%%-500'" Get Name, SID /Value

Pause

Последний раз редактировалось Petya V4sechkin, 24-04-2009 в 20:57.

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:47, 24-04-2009 | #15


Аватара для volk1234

Старовер


Сообщения: 1708
Благодарности: 314

Профиль | Отправить PM | Цитировать


-------

Ю-ху!


Отправлено: 22:27, 24-04-2009 | #16


Аватара для volk1234

Старовер


Сообщения: 1708
Благодарности: 314

Профиль | Отправить PM | Цитировать


Petya V4sechkin
восставшие из ада

Нашел интересное применение этой темы.
Например для защиты от Кидо необходимо запретить доступ к определенной ветке реестра для группы "Все".
Я использовал батник и утилиту subinacl.exe.
SID группы "Все" = S-1-1-0
Взяв за основу ваш скрипт я почему-то не получил названия группы в переменную, а получил пресловутое - отсуствуют экземпляры класса.
Для проверки скрипта я подставил вместо SID группы "Все", такой S-1-5-32-544 и получил "Администраторы".

батник:

Код: Выделить весь код
@Echo off
Set UG=""
Set UGSid=S-1-1-0

 
For /F "UseBackQ Tokens=1* Delims==" %%I In (`WMIC Group Where "SID = '%UGSid%'" Get Name /Value ^| Find "="`) Do Set UG=%%J
Set UG=%UG:~0,-1%

Echo %UG%
pause

-------

Ю-ху!


Отправлено: 02:33, 31-07-2009 | #17



Moderator


Сообщения: 53478
Благодарности: 15506

Профиль | Отправить PM | Цитировать


volk1234, да, Win32_Group не содержит группу Все (и не только).
Полный список:
Код: Выделить весь код
WMIC Group Where "LocalAccount = True" Get Name, SID
Тогда можно PsGetSid поковырять (пример я уже приводил, кажется).
Код: Выделить весь код
@Echo Off

Reg Add HKCU\Software\Sysinternals\PsGetSid /V EulaAccepted /T REG_DWORD /D 1 /F >nul
ChCP 1251 >nul
For /F "Skip=1 Tokens=2 Delims=\" %%I In ('PsGetSid.exe S-1-1-0 2^>nul') Do Set Everyone=%%I
ChCP 866 >nul
Echo %Everyone%

Pause
Тут проблема с кодировкой. На русских и английских системах работает (проверял на XP, 2003, Vista, 7).
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:58, 31-07-2009 | #18


Аватара для volk1234

Старовер


Сообщения: 1708
Благодарности: 314

Профиль | Отправить PM | Цитировать


Ну это уже черезчур.
Легче и правда тупо писать в двух наименованиях УЗ определить язык ОС да и все.
Я так в одном скрипте и сделал:
читать дальше »

Код: Выделить весь код
Set UG=""
Set LANG=""
Set OsName=""
 
:OS_DETECT
For /F "Skip=4 Tokens=3" %%A In ('Reg Query "HKLM\SYSTEM\CurrentControlSet\Control\Nls\Language" /V InstallLanguage') Do Set OSLang=%%A

If %OSLang%==0419 Set LANG=RUS
If %OSLang%==0409 Set LANG=ENU
If %OSLang%==0419 Set UG=‚бҐ
If %OSLang%==0409 Set UG=Everyone

For /F "Skip=4 Tokens=3" %%A In ('Reg Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /V CurrentVersion') Do Set OSver=%%A
If %OSver%==5.1 Set OsName=WindowsXP
If %OSver%==5.2 Set OsName=WindowsServer2003

Set KBFile=%OsName%-KB967715-x86-%LANG%.exe

If Exist "C:\WINDOWS\system32\CatRoot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}\KB967715.cat" (
 Echo KB967715 hot fix Has ALREADY Installed on this system
 Echo Ok..

) Else (
Call :KB_INSTL
)

If %UG%=="" (
Echo UserGroup not Defined because Language of %OSName% unsupported
pause
Goto :EOF
)


Но меня ждала здесь засада - по языку установки ОС -английская, а накатанный на нее MUI портил мне всю картину с именами УЗ...

-------

Ю-ху!


Отправлено: 18:01, 31-07-2009 | #19


Новый участник


Сообщения: 1
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Такой вот скриптик запущенный 1 раз на системе решит проблемму. (Искал искал не нашёл и налобал сам.)

Код: Выделить весь код
__author__ = 'abudkar'

import win32net
import win32security


def main():
    all_groups = [g['name'] for g in win32net.NetLocalGroupEnum('', 0)[0]]
    for group in all_groups:
        sid = str(win32security.LookupAccountName('', group)[0]).replace('PySID:', '')
        standardGroup = StandardGroups.get(sid, '')
        if standardGroup and standardGroup != group:
            info = win32net.NetLocalGroupGetInfo('', group, 0)
            info['name'] = standardGroup
            print('Renaming: `{}` to: `{}`'.format(group, standardGroup).encode('utf-8'))
            win32net.NetLocalGroupSetInfo('', group, 0, info)


#http://support.microsoft.com/kb/243330/en-us
StandardGroups = {
    'S-1-0': 'Null Authority',
    'S-1-0-0': 'Nobody',
    'S-1-1': 'World Authority',
    'S-1-1-0': 'Everyone',
    'S-1-16-0': 'Untrusted Mandatory Level',
    'S-1-16-12288': 'High Mandatory Level',
    'S-1-16-16384': 'System Mandatory Level',
    'S-1-16-20480': 'Protected Process Mandatory Level',
    'S-1-16-28672': 'Secure Process Mandatory Level',
    'S-1-16-4096': 'Low Mandatory Level',
    'S-1-16-8192': 'Medium Mandatory Level',
    'S-1-16-8448': 'Medium Plus Mandatory Level',
    'S-1-2': 'Local Authority',
    'S-1-2-0': 'Local',
    'S-1-2-1': 'Console Logon',
    'S-1-3': 'Creator Authority',
    'S-1-3-0': 'Creator Owner',
    'S-1-3-1': 'Creator Group',
    'S-1-3-2': 'Creator Owner Server',
    'S-1-3-3': 'Creator Group Server',
    'S-1-3-4': 'Owner Rights',
    'S-1-4': 'Non-unique Authority',
    'S-1-5': 'NT Authority',
    'S-1-5-1': 'Dialup',
    'S-1-5-10': 'Principal Self',
    'S-1-5-11': 'Authenticated Users',
    'S-1-5-12': 'Restricted Code',
    'S-1-5-13': 'Terminal Server Users',
    'S-1-5-14': 'Remote Interactive Logon',
    'S-1-5-15': 'This Organization',
    'S-1-5-17': 'This Organization',
    'S-1-5-18': 'Local System',
    'S-1-5-19': 'NT Authority',
    'S-1-5-2': 'Network',
    'S-1-5-20': 'NT Authority',
    'S-1-5-3': 'Batch',
    'S-1-5-32-544': 'Administrators',
    'S-1-5-32-545': 'Users',
    'S-1-5-32-546': 'Guests',
    'S-1-5-32-547': 'Power Users',
    'S-1-5-32-548': 'Account Operators',
    'S-1-5-32-549': 'Server Operators',
    'S-1-5-32-550': 'Print Operators',
    'S-1-5-32-551': 'Backup Operators',
    'S-1-5-32-552': 'Replicators',
    'S-1-5-32-554': 'Pre-Windows 2000 Compatible Access',
    'S-1-5-32-555': 'Remote Desktop Users',
    'S-1-5-32-556': 'Network Configuration Operators',
    'S-1-5-32-557': 'Incoming Forest Trust Builders',
    'S-1-5-32-558': 'Performance Monitor Users',
    'S-1-5-32-559': 'Performance Log Users',
    'S-1-5-32-560': 'Windows Authorization Access Group',
    'S-1-5-32-561': 'Terminal Server License Servers',
    'S-1-5-32-562': 'Distributed COM Users',
    'S-1-5-32-569': 'Cryptographic Operators',
    'S-1-5-32-573': 'Event Log Readers',
    'S-1-5-32-574': 'Certificate Service DCOM Access',
    'S-1-5-32-575': 'RDS Remote Access Servers',
    'S-1-5-32-576': 'RDS Endpoint Servers',
    'S-1-5-32-577': 'RDS Management Servers',
    'S-1-5-32-578': 'Hyper-V Administrators',
    'S-1-5-32-579': 'Access Control Assistance Operators',
    'S-1-5-32-580': 'Remote Management Users',
    'S-1-5-4': 'Interactive',
    'S-1-5-5-X-Y': 'Logon Session',
    'S-1-5-6': 'Service',
    'S-1-5-64-10': 'NTLM Authentication',
    'S-1-5-64-14': 'SChannel Authentication',
    'S-1-5-64-21': 'Digest Authentication',
    'S-1-5-7': 'Anonymous',
    'S-1-5-8': 'Proxy',
    'S-1-5-80': 'NT Service',
    'S-1-5-80-0': 'All Services',
    'S-1-5-9': 'Enterprise Domain Controllers'
}

if __name__ == '__main__':
    main()

Последний раз редактировалось aboudkar@fb, 27-07-2014 в 02:31. Причина: Форматирование.


Отправлено: 02:28, 27-07-2014 | #20



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Как получить название группы Администраторов в переменную.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Как записать в переменную результат выполнения команды? MSI Скриптовые языки администрирования Windows 64 24-12-2020 18:20
Добавление доменной группы в группу локальных администраторов gadkin Microsoft Windows NT/2000/2003 18 12-10-2010 11:47
задать название рабочей группы Setka Автоматическая установка Windows 2000/XP/2003 1 24-08-2007 03:45
Установка - Что такое член группы администраторов!!! Не могу ничего установить domber Microsoft Windows Vista 0 04-04-2007 22:08
(solved)Как получить переменную, содержащую путь к директории Documents and Settings? arial Автоматическая установка Windows 2000/XP/2003 12 15-11-2005 15:58




 
Переход