|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] парсинг NTFS разрешений каталога и подкаталогов |
|
CMD/BAT - [решено] парсинг NTFS разрешений каталога и подкаталогов
|
Новый участник Сообщения: 44 |
Профиль | Отправить PM | Цитировать
Здравствуйте!
Появилась необходимость провести аудит файловых ресурсов. Для этих целей подошел бы скрипт, а вот тут я не силен, и прошу помощи у сообщества. Задача стоит такая входные данные: путь к папке с которой необходимо собрать данные ( что-то вроде c:\моя_шара) а на выходе получить txt файл вот с таким результатом: 1 имя папки нтфс доступ: перечисление 1.2 имя папки нтфс доступ: перечисление 1.2 имя папки нтфс доступ: 1.2.3 имя папки нтфс доступ: перечисление 1.2.3 имя папки нтфс доступ: перечисление 1.2.3.4 имя папки нтфс доступ: перечисление 1.2.3.4.5 имя папки нтфс доступ: перечисление 1.2.3.4 имя папки нтфс доступ: перечисление 1.2.3 имя папки нтфс доступ: перечисление *разделитель "табуляция" **"1.*" - уровень папки от родительской Если есть другой способ получить желаемое, рад буду услышать совет. Заранее спасибо за помощь! |
|
Отправлено: 16:25, 23-07-2013 |
Ветеран Сообщения: 12417
|
Профиль | Отправить PM | Цитировать именно скриптом нужно? или подойдёт программа AccessEnum
|
------- Отправлено: 16:35, 23-07-2013 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 44
|
Профиль | Отправить PM | Цитировать exo, подойдет любой способ, главное на выходе получить данные в текстовом виде, так их обрабатывать будет проще.
Спасибо за ссылку на программу, сейчас испробую ее. |
Отправлено: 17:18, 23-07-2013 | #3 |
Новый участник Сообщения: 44
|
Профиль | Отправить PM | Цитировать exo, программа хорошая, но выводит только разрешения на чтение/запись.
а например наследуется ли эти разрешения, она не говорит. охота получить исчерпывающию информацию, как например после выполнения программы icacls: C:\Users\support_921>icacls "F:\Документы\ПГ ЗМЗ\Управление персоналом" F:\Документы\ПГ ЗМЗ\Управление персоналом OFFICE\anu:(CI)(RX) OFFICE\Документы Служба персонала:(OI)(CI)(M) OFFICE\dds:(OI)(CI)(M) OFFICE\fdv:(OI)(CI)(M) OFFICE\bold:(OI)(CI)(RX) NT AUTHORITY\Прошедшие проверку:(I)(CI)(RX) OFFICE\Domain Admins:(I)(OI)(CI)(F) OFFICE\psd:(I)(OI)(CI)(M) Успешно обработано 1 файлов; не удалось обработать 0 файлов |
Отправлено: 17:33, 23-07-2013 | #4 |
Новый участник Сообщения: 44
|
Профиль | Отправить PM | Цитировать я тут подумал, примерно должен быть такой алгоритм:
1. сохраняем список всех каталогов в txt файл: dir /s /b /a:d >dir.txt 2. открываем тхт файл 3. узнаем сколько строк, и пишем в переменную 4. цикл от 1 до N 5. в txt файл result записываем строку N 6. в цикле считываем N строку и подставляем ее в команду icacls, результат записывает в тхт файл result |
|
Отправлено: 08:23, 24-07-2013 | #5 |
Старожил Сообщения: 415
|
Профиль | Отправить PM | Цитировать yanus74, временные файлы для списка, подсчёт строк - зачем так переусложнять? Всё одним циклом делается.
|
Отправлено: 10:59, 24-07-2013 | #6 |
Новый участник Сообщения: 44
|
Профиль | Отправить PM | Цитировать Anonymоus, спасибо!
но тут такая проблемка проявилась, результаты работы скрипта, не получиться парсить автоматически. дело в том, что результат выполнения icacls выглядит таким образом: d:\шара Все:(OI)(CI)(F) между d:\шара и Все:(OI)(CI)(F) есть пробел. а т.к. пробелы также присутствую и в названиях каталогов, то из-за этого не получится корректно разделить путь и права доступа. я тут подумал, что можно как-то модифицировать скрипт. что бы в тхт файл result записывался путь каталога из %%A, а в результате вывода icacls вырезать этот путь. Можете модифицировать скрипт, с учетом этого момента?) Спасибо вам за помощь! |
Отправлено: 15:02, 24-07-2013 | #7 |
Старожил Сообщения: 415
|
Профиль | Отправить PM | Цитировать yanus74, думаю, этот вариант вам пригодится больше.
@Echo Off SetLocal EnableDelayedExpansion Set BasePath=C:\Temp Set Result=result.txt :: Перезаписываем лог Echo [%Date% %Time%]: Started>"%Result%" Echo.>>"%Result%" :: Работа с корневой директорией Call :icacls-fmt "%BasePath%" :: Обход всех вложенных директорий For /F "delims=" %%A In ('Dir "%BasePath%" /A:D /B /S') Do ( Call :icacls-fmt "%%~A" ) Pause&Exit /B :icacls-fmt Echo [%~1] :: Получаем разрешения, игнорируя последнюю строку о удачном завершении For /F "delims=" %%A In ('icacls "%~1"^|Find /V ";" ') Do ( Set MarginLeft=&&Set $Path=%~1&&Set Data=%%A :: Убираем лишний отступ с начала строк Call :fmt $Path :: Быстрая, нересурсозатратная в отличии от вызова find, проверка на наличие вхождения пути If Not "!Data:%~1=!"=="!Data!" ( :: Пишем путь и исправленную строку Echo [%~1]>>"%Result%" Echo !Data:%~1=!>>"%Result%" ) Else ( :: Не трогаем строку, выводим как есть Echo !Data!>>"%Result%" ) ) Echo.>>"%Result%" Exit /B :fmt :: Быстрый подсчёт длины строки Set StrLen.S=A!%~1! Set StrLen=0 For /L %%P In (12,-1,0) Do ( Set /A "StrLen|=1<<%%P" For %%I In (!StrLen!) Do If "!StrLen.S:~%%I,1!"=="" Set /A "StrLen&=~1<<%%P" ) :: Убираем отступ For /L %%B In (1,1,!StrLen!) Do (Set MarginLeft= !MarginLeft!) Set Data=!Data:%MarginLeft%=! Exit /B |
Отправлено: 21:44, 24-07-2013 | #8 |
Новый участник Сообщения: 44
|
Профиль | Отправить PM | Цитировать Anonymоus, просто супер, спасибо!
|
Отправлено: 07:34, 25-07-2013 | #9 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Прочее - Настройка разрешений NTFS для сетевой папки | Stirlits | Сетевые технологии | 7 | 30-07-2013 09:35 | |
CMD/BAT - [решено] Создать архив из всех файлов текущего каталога и его подкаталогов кроме одного подкат | bulchonok | Скриптовые языки администрирования Windows | 4 | 04-04-2013 22:26 | |
Объединение разрешений для общей папки и разрешений NTFS | masyaka | Хочу все знать | 3 | 21-02-2013 18:13 | |
PowerShell - [решено] пакетное изменение разрешений NTFS папок | ratibor79 | Скриптовые языки администрирования Windows | 2 | 25-11-2012 09:57 | |
[решено] Резервирование NTFS разрешений. | Bill Gates | Microsoft Windows NT/2000/2003 | 7 | 25-09-2009 15:39 |
|