|
|
Скрипт на VBS Скрипта который долго ждали большефики. Юзайте, комментируйте. '*************************************** '* Folder v.02 (универсальный) '* Скрипт на VBS '* OS: Win2K server, Win2K Prof, WinXp SP1, WinXpSp2 '*************************************** ' Состав поставки: ' folder.vbs - сам скрипт. ' folder.txt - файл настроек каталогов сканирования '*************************************** ' Скрипт распостраняется по принципу "Как есть". Автор скрипта не несет ' не какой отвественности, и не зачто не отвечает. ' Условия лицензирования: GPL 2.0 ' При изменении любого участка скрипта следует уведомить автора, т.е. меня ' об изменениях в коде. ' Распостраннение: разрешается любое бесплатное распостранение любым способом ' с сохранением оригинального скрипта. В случае распостранения/использывания ' модификаций следует указать ссылку на оригинальный скрипт, и вкладывать ' оригинал в комплект. ' Чтото не понятно? чтото хотите поправить? нашли ошибку? пишите. '*************************************** '* Скрипт построения дерева папок с указанного места, с указанием прав '* доступа на каждую папку. '* Автор: Дмитрий 'Timon_Crazy' Малыхин '* E-mail: wct@gorodok.net '* Blog: http://timon-crazy.livejournal.com/ '*************************************** 'Процедура получения прав определенной папки, файла 'Вариант для короткой версии 'Построенно на примере от MS Sub Dasl_mini (strFileName) SE_DACL_PRESENT = &h4 ACCESS_ALLOWED_ACE_TYPE = &h0 ACCESS_DENIED_ACE_TYPE = &h1 FILE_ALL_ACCESS = &h1f01ff FILE_APPEND_DATA = &h000004 FILE_DELETE = &h010000 FILE_DELETE_CHILD = &h000040 FILE_EXECUTE = &h000020 FILE_READ_ATTRIBUTES = &h000080 FILE_READ_CONTROL = &h020000 FILE_READ_DATA = &h000001 FILE_READ_EA = &h000008 FILE_SYNCHRONIZE = &h100000 FILE_WRITE_ATTRIBUTES = &h000100 FILE_WRITE_DAC = &h040000 FILE_WRITE_DATA = &h000002 FILE_WRITE_EA = &h000010 FILE_WRITE_OWNER = &h080000 Set objWMIService = GetObject("winmgmts:") Set objFileSecuritySettings = _ objWMIService.Get("Win32_LogicalFileSecuritySetting='" & strFileName & "'") intRetVal = objFileSecuritySettings.GetSecurityDescriptor(objSD) intControlFlags = objSD.ControlFlags if intControlFlags AND SE_DACL_PRESENT Then arrACEs = objSD.DACL For Each objACE in arrACEs TFm.Write "<br>Пользователь: <FONT COLOR=""GREEN"">"&objACE.Trustee.Domain & "\" & objACE.Trustee.Name&"</FONT><br>" If objACE.AceType = ACCESS_ALLOWED_ACE_TYPE Then TFm.Write vbTab & "Разрешенно:<br>" ElseIf objACE.AceType = ACCESS_DENIED_ACE_TYPE Then TFm.Write vbTab & "Запрещенно:<br>" End If If objACE.AccessMask AND FILE_ALL_ACCESS Then TFm.Write vbTab & vbTab & "Полный доступ<br>" End If If objACE.AccessMask AND FILE_APPEND_DATA Then TFm.Write vbTab & vbTab & "Создание папок / Дозапись новых файлов<br>" End If If objACE.AccessMask AND FILE_DELETE Then TFm.Write vbTab & vbTab & "Удаление<br>" End If If objACE.AccessMask AND FILE_DELETE_CHILD Then TFm.Write vbTab & vbTab & "Удалять вложенние<br>" End If If objACE.AccessMask AND FILE_EXECUTE Then TFm.Write vbTab & vbTab & "Запуск файла<br>" End If 'Если Вам нужны эти права раскоментируйте '' If objACE.AccessMask AND FILE_READ_ATTRIBUTES Then '' TFm.Write vbTab & vbTab & "Чтение атрибутов<br>" '' End If '' If objACE.AccessMask AND FILE_READ_CONTROL Then '' TFm.Write vbTab & vbTab & "FILE_READ_CONTROL <br>" '' End If If objACE.AccessMask AND FILE_READ_DATA Then TFm.Write vbTab & vbTab & "Чтение<br>" End If '' If objACE.AccessMask AND FILE_READ_EA Then '' TFm.Write vbTab & vbTab & "FILE_READ_EA <br>" '' End If '' If objACE.AccessMask AND FILE_SYNCHRONIZE Then '' TFm.Write vbTab & vbTab & "FILE_SYNCHRONIZE <br>" '' End If '' If objACE.AccessMask AND FILE_WRITE_ATTRIBUTES Then '' TFm.Write vbTab & vbTab & "FILE_WRITE_ATTRIBUTES <br>" '' End If '' If objACE.AccessMask AND FILE_WRITE_DAC Then '' TFm.Write vbTab & vbTab & "FILE_WRITE_DAC <br>" '' End If If objACE.AccessMask AND FILE_WRITE_DATA Then TFm.Write vbTab & vbTab & "Запись<br>" End If '' If objACE.AccessMask AND FILE_WRITE_EA Then '' TFm.Write vbTab & vbTab & "FILE_WRITE_EA <br>" '' End If '' If objACE.AccessMask AND FILE_WRITE_OWNER Then '' TFm.Write vbTab & vbTab & "FILE_WRITE_OWNER <br>" '' End If Next Else TFm.Write "Не возможно получить данные<br>" End If End Sub Sub Dasl_all (strFileName) 'strFileName = objSubFolder.Path SE_DACL_PRESENT = &h4 ACCESS_ALLOWED_ACE_TYPE = &h0 ACCESS_DENIED_ACE_TYPE = &h1 FILE_ALL_ACCESS = &h1f01ff FILE_APPEND_DATA = &h000004 FILE_DELETE = &h010000 FILE_DELETE_CHILD = &h000040 FILE_EXECUTE = &h000020 FILE_READ_ATTRIBUTES = &h000080 FILE_READ_CONTROL = &h020000 FILE_READ_DATA = &h000001 FILE_READ_EA = &h000008 FILE_SYNCHRONIZE = &h100000 FILE_WRITE_ATTRIBUTES = &h000100 FILE_WRITE_DAC = &h040000 FILE_WRITE_DATA = &h000002 FILE_WRITE_EA = &h000010 FILE_WRITE_OWNER = &h080000 Set objWMIService = GetObject("winmgmts:") Set objFileSecuritySettings = objWMIService.Get("Win32_LogicalFileSecuritySetting='" & strFileName & "'") intRetVal = objFileSecuritySettings.GetSecurityDescriptor(objSD) intControlFlags = objSD.ControlFlags If intControlFlags AND SE_DACL_PRESENT Then arrACEs = objSD.DACL For Each objACE in arrACEs '' WScript.Echo objACE.Trustee.Domain & "\" & objACE.Trustee.Name TF.Write "<br>Пользователь: <FONT COLOR=""GREEN"">"&objACE.Trustee.Domain & "\" & objACE.Trustee.Name&"</FONT><br>" If objACE.AceType = ACCESS_ALLOWED_ACE_TYPE Then '' WScript.Echo vbTab & "Allowed:" TF.Write vbTab & "Разрешенно:<br>" ElseIf objACE.AceType = ACCESS_DENIED_ACE_TYPE Then '' WScript.Echo vbTab & "Denied:" TF.Write vbTab & "Запрещенно:<br>" End If If objACE.AccessMask AND FILE_ALL_ACCESS Then TF.Write vbTab & vbTab & "Полный доступ<br>" End If If objACE.AccessMask AND FILE_APPEND_DATA Then TF.Write vbTab & vbTab & "Создание папок / Дозапись новых файлов<br>" End If If objACE.AccessMask AND FILE_DELETE Then TF.Write vbTab & vbTab & "Удаление<br>" End If If objACE.AccessMask AND FILE_DELETE_CHILD Then TF.Write vbTab & vbTab & "Удалять вложенние<br>" End If If objACE.AccessMask AND FILE_EXECUTE Then TF.Write vbTab & vbTab & "Запуск файла<br>" End If '' If objACE.AccessMask AND FILE_READ_ATTRIBUTES Then '' TFm.Write vbTab & vbTab & "Чтение атрибутов<br>" '' End If '' If objACE.AccessMask AND FILE_READ_CONTROL Then '' TFm.Write vbTab & vbTab & "FILE_READ_CONTROL <br>" '' End If If objACE.AccessMask AND FILE_READ_DATA Then TF.Write vbTab & vbTab & "Чтение<br>" End If '' If objACE.AccessMask AND FILE_READ_EA Then '' TFm.Write vbTab & vbTab & "FILE_READ_EA <br>" '' End If '' If objACE.AccessMask AND FILE_SYNCHRONIZE Then '' TFm.Write vbTab & vbTab & "FILE_SYNCHRONIZE <br>" '' End If '' If objACE.AccessMask AND FILE_WRITE_ATTRIBUTES Then '' TFm.Write vbTab & vbTab & "FILE_WRITE_ATTRIBUTES <br>" '' End If '' If objACE.AccessMask AND FILE_WRITE_DAC Then '' TFm.Write vbTab & vbTab & "FILE_WRITE_DAC <br>" '' End If If objACE.AccessMask AND FILE_WRITE_DATA Then TF.Write vbTab & vbTab & "Запись<br>" End If '' If objACE.AccessMask AND FILE_WRITE_EA Then '' TFm.Write vbTab & vbTab & "FILE_WRITE_EA <br>" '' End If '' If objACE.AccessMask AND FILE_WRITE_OWNER Then '' TFm.Write vbTab & vbTab & "FILE_WRITE_OWNER <br>" '' End If Next Else TF.Write "Не возможно получить данные<br>" End If End Sub 'Вывод полной версии отчета Sub ShowSubFolders(objFolder) Set colFolders = objFolder.SubFolders For Each objSubFolder In colFolders TF.Write "<br> Папка: <b>"&objSubFolder.Path&"</b><br>" Dasl_all (objSubFolder.Path) TF.Write "<br>" Set colFiles = objSubFolder.Files For Each objFile In colFiles Next ShowSubFolders(objSubFolder) Next End Sub 'Вывод краткой версии отчета Sub mini_ShowSubFolders(objFolder) Set colFolders = objFolder.SubFolders For Each objSubFolder In colFolders ' WScript.Echo objSubFolder.Path TFm.Write "<br>Папка: <b>"&objSubFolder.Path&"</b><br>" Dasl_mini (objSubFolder.Path) TFm.Write "<br>" Set colFiles = objSubFolder.Files Next End Sub Sub all_write (str_print) if full = 1 then TF.Write str_print End if if mini =1 then TFm.Write str_print End if End Sub 'Основная функция full = 1 'Выводит отчет полной версии mini = 1 'Выводит краткий отчет '^Тут явная бага. 'но как то работает. будет фичей пока ктонить ен поправит WScript.Echo "Скрипт показа прав на папки в файло-хранилище. v.0.2 (универсальный)" Dim folder Set FSO = CreateObject("Scripting.FileSystemObject") Set txtStream = fso.OpenTextFile("folder.txt") Set FSO = CreateObject("Scripting.FileSystemObject") Const FOR_READING = 1 fname = "folder_"&Date()&".htm" if full = 1 then Set TF = FSO.CreateTextFile("all_"&fname) End if if mini = 1 then Set TFm = FSO.CreateTextFile("mini_"&fname) End if Set patch_f = fso.GetFolder(".") all_write ("<html>") all_write ("<head>") if full = 1 then TF.Write "<title>Полный Список прав на дерево директорий файлового сервера "&Date()&"</title>" End if if mini = 1 then TFm.Write "<title>Краткий Список прав на дерево директорий файлового сервера "&Date()&"</title>" End if all_write ("</head>") all_write ("<body>") if full = 1 then TF.Write "<b>Полный Cписок прав на дерево директорий файлового сервера по состоянию на "&Date()&"</b>" End if if mini = 1 then TFm.Write "<b>Краткий Cписок прав на дерево директорий файлового сервера по состоянию на "&Date()&"</b>" End if if full = 1 then TF.Write "<br>Краткий список можно просмотреть <a href=""file://"&patch_f&"\mini_"&fname&""">mini_"&fname&"</a>" End if if mini = 1 then TFm.Write "<br>Полный список можно просмотреть <a href=""file://"&patch_f&"\all_"&fname&""">all_"&fname&"</a>" End if all_write ("<hr>") Do While Not (txtStream.atEndOfStream) str = txtStream.ReadLine all_write ("<br><br><b>Файл сервер <a href=""file://"&str&""">"&str&"</a></b><br>") 'Получение списка strFolder = str Set objFolder = FSO.GetFolder(strFolder) Set colFiles = objFolder.Files For Each objFile In colFiles Next if full = 1 then ShowSubFolders(objFolder) End if if mini = 1 then mini_ShowSubFolders(objFolder) End if Loop all_write ("<hr><i>Файл сгенерирован "&Date()&" "&Time()&"</i>") all_write ("</body>") all_write ("</html>") WScript.Echo "Готово. Результат находиться в файлах all_"&fname&" и mini_"&fname Dim objShell Set objShell = CreateObject("WScript.Shell") if full = 1 then objShell.Run "IEXPLORE "&patch_f&"\mini_"&fname End if if mini = 1 then objShell.Run "IEXPLORE "&patch_f&"\all_"&fname End if WScript.Quit Скачать с примерами можно тут - внешка |
||||||||||||
|
|
|||||||||||||