|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Разрешения для реестра и файла |
|
|
VBS/WSH/JS - [решено] Разрешения для реестра и файла
|
Новый участник Сообщения: 7 |
Добрый Всем День!
Помогите пожалуйста, бьюсь над проблемой уже не первый день, ни интернет ни книги что-то не помогают. Вопрос: Как получить список пользователей и их прав пользования на ветку реестра и на файл? Иными словами: Это "разрешения..." для реестра и "свойста-безопастность" для файла. Заранее ВАМ Благодарен! |
|
Отправлено: 15:13, 22-02-2012 |
Ветеран Сообщения: 12426
|
Профиль | Отправить PM | Цитировать Как-нибудь так:
SetACL -on HKEY_LOCAL_MACHINE\SYSTEM -ot reg -actn list -lst "f:tab;s:y" |
Отправлено: 17:20, 22-02-2012 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 7
|
Профиль | Отправить PM | Цитировать Эммм..а можно поподробнее? Как это приминить в js файле? Такой функции не известно да и на запись ругань идет.
Если записать даже так: SetACL -on "HKLM\\SYSTEM" -ot reg -actn list -lst "f:tab;s:y"; неверно выходит ( |
Отправлено: 17:27, 22-02-2012 | #3 |
Старожил Сообщения: 210
|
Профиль | Отправить PM | Цитировать Цитата sergeosn:
Цитата sergeosn:
Однако для реестра этот метод доступен, начиная лишь с Vista. В 2000 - 2003 используется метод CheckAccess, но с его помощью можно получить содержимое списка управления доступом только для того пользователя, в контексте безопасности которого запущен сценарий. Примеры соответствующих сценариев на VBS можете найти здесь: Полезные скрипты, сообщение #21 На JScript портируйте самостоятельно. |
||
Отправлено: 10:31, 24-02-2012 | #4 |
Новый участник Сообщения: 7
|
Профиль | Отправить PM | Цитировать О! спасибо за ссылочку. Да действительно vbs скрипт чтения прав на каталог/файл работает!
А вот на счет реестра вообще не понятно. может он что-то другое проверяет. Но результат выдает какойто обобщенный чтоли...Не такой как для каталога/файла. |
|
Отправлено: 13:10, 24-02-2012 | #5 |
Старожил Сообщения: 210
|
Профиль | Отправить PM | Цитировать Цитата sergeosn:
|
|
Отправлено: 14:11, 24-02-2012 | #6 |
Новый участник Сообщения: 7
|
Профиль | Отправить PM | Цитировать А у Вас случайно нет кодика для второй задачи. про реестр? чтобы видно было по пользователям(группам) права
![]() |
Отправлено: 17:10, 24-02-2012 | #7 |
Старожил Сообщения: 210
|
Профиль | Отправить PM | Цитировать Цитата sergeosn:
Dim strComputer, strKeyPath, lngKey, xResult, strDescription '--- Коды ключей реестра Const HKCR = &H80000000 'HKEY_CLASSES_ROOT Const HKCU = &H80000001 'HKEY_CURRENT_USER Const HKLM = &H80000002 'HKEY_LOCAL_MACHINE Const HKU = &H80000003 'HKEY_USERS '------ strComputer = "computer" strKeyPath = "Software" lngKey = HKLM If Ping_GUI(strComputer) Then xResult = Get_DACLInfo_Reg(strComputer, lngKey, strKeyPath, strDescription) If IsNull(xResult) Then WScript.Echo "Не поддерживаемая версия ОС." ElseIf IsEmpty(xResult) Then WScript.Echo "Подключ " & UCase(strKeyPath) & " не найден." ElseIf IsNumeric(xResult) Then WScript.Echo "Ошибка " & xResult & vbNewLine & strDescription ElseIf Len(xResult) = 0 Then WScript.Echo "Список управления доступом к подключу " & UCase(strKeyPath) & " пуст." Else WScript.Echo xResult End If Else WScript.Echo "Станция " & UCase(strComputer) & " не отвечает или не существует." End If WScript.Quit 0 '====== Function Get_DACLInfo_Reg(strWS, lngKey, strSubKey, strComment) Dim objWMI, objCollection, objItem, intOSVersion Dim arrFlagName, arrFlagValue, arrGenericName, arrGenericValue, arrTypes, arrSubKeys Dim objSD, intRes, strList, strTemp, lngTemp, blnContinue Const ACCESS_ALLOWED_ACE_TYPE = 0 'Флаг-признак записи типа "РАЗРЕШЕНИЕ" Const ACCESS_DENIED_ACE_TYPE = 1 'Флаг-признак записи типа "ЗАПРЕТ" Const INHERITED_ACE = 16 'Флаг-признак того, что текущая запись DACL унаследована от родительского объекта Const FULL_ACCESS = 983103 'Значение маски полного разрешения или запрета arrTypes = Array("РАЗРЕШЕНО:", "ЗАПРЕЩЕНО:") arrFlagName = Array("Запрос значения", "Задание значения", _ "Создание подраздела", "Перечисление подразделов", _ "Уведомление", "Создание связи", "Удаление", "Запись DAC", _ "Смена владельца", "Чтение разрешений") arrFlagValue = Array(1, 2, 4, 8, 16, 32, 65536, 262144, 524288, 131072) '--- Наименования и значения универсальных масок arrGenericName = Array("Полный доступ (универсальная маска)", "Выполнение (универсальная маска)", "Запись (универсальная маска)", "Чтение (универсальная маска)") arrGenericValue = Array(&H10000000, &H20000000, &H40000000, &H80000000) '------ '--- Определение версии ОС Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strWS & "\root\cimv2") If Err.Number = 0 Then Set objCollection = objWMI.ExecQuery("SELECT Version FROM Win32_OperatingSystem") If Err.Number = 0 Then For Each objItem In objCollection intOSVersion = CInt(Replace(Left(objItem.Version, 3), ".", "")) Next Else Err.Clear End If Set objCollection = Nothing Else Err.Clear End If '------ If intOSVersion >= 60 Or IsEmpty(intOSVersion) Then On Error Resume Next Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strWS & "\root\default:StdRegProv") If Err.Number = 0 Then If InStr(strSubKey, "\") > 0 Then strTemp = Left(strSubKey, InStrRev(strSubKey, "\") - 1) objWMI.EnumKey lngKey, strTemp, arrSubKeys Else objWMI.EnumKey lngKey, vbNullString, arrSubKeys End If If Err.Number = 0 Then If IsArray(arrSubKeys) Then If InStr(1, Join(arrSubKeys, vbNewLine), Split(strSubKey, "\")(UBound(Split(strSubKey, "\"))), vbTextCompare) > 0 Then blnContinue = True Else Get_DACLInfo_Reg = Empty End If Else Get_DACLInfo_Reg = Empty End If Else strComment = Err.Description Get_DACLInfo_Reg = Err.Number Err.Clear End If If blnContinue Then intRes = objWMI.GetSecurityDescriptor(lngKey, strSubKey, objSD) If Err.Number = 0 Then If intRes = 0 Then If Not IsNull(objSD.DACL) Then For Each objItem In objSD.DACL '--- Определение режима наследования записи, области её действия и типа If CBool(objItem.AceFlags And INHERITED_ACE) Then strTemp = " (унаследовано; " lngTemp = objItem.AceFlags - INHERITED_ACE Else strTemp = " (не унаследовано; " lngTemp = objItem.AceFlags End If Select Case lngTemp Case 0: strTemp = strTemp & "действует на: только текущий раздел)" Case 2: strTemp = strTemp & "действует на: текущий раздел и его подразделы)" Case 6, 14: strTemp = strTemp & "действует на: только ближайший подраздел текущего раздела)" Case 10: strTemp = strTemp & "действует на: только подразделы текущего раздела)" Case Else: strTemp = strTemp & "область действия не определена); " End Select strTemp = strTemp & vbNewLine & "---" & vbNewLine & arrTypes(objItem.AceType) & vbNewLine '------ '--- Анализ маски доступа текущей записи lngTemp = objItem.AccessMask Select Case Abs(lngTemp) Case FULL_ACCESS: strTemp = strTemp & "Полный доступ" & vbNewLine Case Else 'обобщённый анализ вариантов универсальных масок (биты №№ 28 - 31) If Abs(lngTemp) > FULL_ACCESS Then For i = 0 To UBound(arrGenericValue) If lngTemp And arrGenericValue(i) Then strTemp = strTemp & arrGenericName(i) & vbNewLine End If Next End If 'детальный анализ не универсальной маски (биты №№ 0 - 20) For i = 0 To UBound(arrFlagValue) If lngTemp And arrFlagValue(i) Then strTemp = strTemp & arrFlagName(i) & vbNewLine End If Next End Select '------ strList = strList & UCase(objItem.Trustee.Domain & "\" & objItem.Trustee.Name) & strTemp & "===" & vbNewLine Next Set objItem = Nothing Get_DACLInfo_Reg = strList Else Get_DACLInfo_Reg = vbNullString End If Set objSD = Nothing Else Get_DACLInfo_Reg = intRes Err.Clear End If Else strComment = Err.Description Get_DACLInfo_Reg = Err.Number Err.Clear End If End If Else strComment = Err.Description Get_DACLInfo_Reg = Err.Number Err.Clear End If Else Get_DACLInfo_Reg = Null End If Set objWMI = Nothing End Function '====== Function Ping_GUI(strName) Dim objWMI, objItem Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery("SELECT * FROM Win32_PingStatus WHERE Address='" & strName & "'") For Each objItem In objWMI If IsNull(objItem.StatusCode) Or objItem.StatusCode <> 0 Then Ping_GUI = False Else Ping_GUI = True End If Next Set objItem = Nothing Set objWMI = Nothing End Function |
|
Последний раз редактировалось DmitriiV, 29-02-2012 в 13:05. Отправлено: 16:19, 28-02-2012 | #8 |
Новый участник Сообщения: 7
|
Профиль | Отправить PM | Цитировать Ок! Спасибо!!!!!!!!! Попробуем! ))
|
Отправлено: 09:51, 29-02-2012 | #9 |
Новый участник Сообщения: 7
|
Профиль | Отправить PM | Цитировать Эмм..может что-то я спрошу сейчас не так) но ОС на которой идет проверка ХР...и скрипт непропускается)
|
Отправлено: 14:16, 29-02-2012 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
VBS/WSH/JS - [решено] Изменение разрешения на ветку реестра | SanyaJoker | Скриптовые языки администрирования Windows | 12 | 04-02-2016 22:01 | |
2003/XP/2000 - Ошибка 1926. Не удалось установить разрешения для файла | kefi | Microsoft Office (Word, Excel, Outlook и т.д.) | 5 | 20-12-2010 18:02 | |
Доступ - [решено] не устанавливаются разрешения для раздела реестра | holden | Microsoft Windows Vista | 4 | 12-01-2009 22:08 | |
[решено] Как выставить разрешения для пользователей на ветку реестра | Sandor | Microsoft Windows NT/2000/2003 | 4 | 09-11-2006 15:30 | |
разрешения на ветки реестра | maxtravilov | Автоматическая установка Windows 2000/XP/2003 | 1 | 27-10-2005 21:44 |
|