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

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

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

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


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

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


Изменения
Автор: yanus74
Дата: 24-07-2013
Здравствуйте!
Появилась необходимость провести аудит файловых ресурсов.
Для этих целей подошел бы скрипт, а вот тут я не силен, и прошу помощи у сообщества.
Задача стоит такая
входные данные: путь к папке с которой необходимо собрать данные ( что-то вроде 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

 
exo exo вне форума

Аватара для exo

Ветеран


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

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


именно скриптом нужно? или подойдёт программа AccessEnum

-------
Вежливый клиент всегда прав!


Отправлено: 16:35, 23-07-2013 | #2



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

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


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


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

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


exo, подойдет любой способ, главное на выходе получить данные в текстовом виде, так их обрабатывать будет проще.
Спасибо за ссылку на программу, сейчас испробую ее.

Отправлено: 17:18, 23-07-2013 | #3


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


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

Профиль | Отправить 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
Благодарности: 2

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


я тут подумал, примерно должен быть такой алгоритм:
Код: Выделить весь код
1. сохраняем список всех каталогов в txt файл: dir /s /b /a:d >dir.txt
2. открываем тхт файл
3. узнаем сколько строк, и пишем в переменную
4. цикл от 1 до N
5. в txt файл result записываем строку N
6. в цикле считываем N строку и подставляем ее в команду icacls, результат записывает в тхт файл result
вопросы по 2,3 ( как реализовать) и по 5,6 пунктам ( конкретней, как указать N строку)

Отправлено: 08:23, 24-07-2013 | #5


Старожил


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

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


yanus74, временные файлы для списка, подсчёт строк - зачем так переусложнять? Всё одним циклом делается.
Код: Выделить весь код
@Echo Off
Set BaseDir=C:\Temp
Set Result=result.txt
:: Пишем результат для корневой директории
icacls "%BaseDir%">"%Result%"
:: Пишем результат для всех вложенных директорий
For /F "delims=" %%A In ('Dir "%BaseDir%" /A:D /B /S') Do (
	icacls "%%~A">>"%Result%"
)
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:59, 24-07-2013 | #6


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


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

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


Anonymоus, спасибо!
но тут такая проблемка проявилась, результаты работы скрипта, не получиться парсить автоматически.
дело в том, что результат выполнения icacls выглядит таким образом:
d:\шара Все:(OI)(CI)(F)
между d:\шара и Все:(OI)(CI)(F) есть пробел.
а т.к. пробелы также присутствую и в названиях каталогов, то из-за этого не получится корректно разделить путь и права доступа.
я тут подумал, что можно как-то модифицировать скрипт.
что бы в тхт файл result записывался путь каталога из %%A, а в результате вывода icacls вырезать этот путь.
Можете модифицировать скрипт, с учетом этого момента?)
Спасибо вам за помощь!

Отправлено: 15:02, 24-07-2013 | #7


Старожил


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

Профиль | Отправить 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
Лог тогда получается вот в таком формате:
Показать лог
Код: Выделить весь код
[24.07.2013  20:43:12,19]: Started

[C:\Temp]
 BUILTIN\Администраторы:(I)(F)
 BUILTIN\Администраторы:(I)(OI)(CI)(IO)(F)
 NT AUTHORITY\система:(I)(F)
 NT AUTHORITY\система:(I)(OI)(CI)(IO)(F)
 BUILTIN\Пользователи:(I)(OI)(CI)(RX)
 NT AUTHORITY\Прошедшие проверку:(I)(M)
 NT AUTHORITY\Прошедшие проверку:(I)(OI)(CI)(IO)(M)

[C:\Temp\fontconfig]
 BUILTIN\Администраторы:(I)(F)
 BUILTIN\Администраторы:(I)(OI)(CI)(IO)(F)
 NT AUTHORITY\система:(I)(F)
 NT AUTHORITY\система:(I)(OI)(CI)(IO)(F)
 BUILTIN\Пользователи:(I)(OI)(CI)(RX)
 NT AUTHORITY\Прошедшие проверку:(I)(M)
 NT AUTHORITY\Прошедшие проверку:(I)(OI)(CI)(IO)(M)

[C:\Temp\Low]
 BUILTIN\Администраторы:(I)(F)
 BUILTIN\Администраторы:(I)(OI)(CI)(IO)(F)
 NT AUTHORITY\система:(I)(F)
 NT AUTHORITY\система:(I)(OI)(CI)(IO)(F)
 BUILTIN\Пользователи:(I)(OI)(CI)(RX)
 NT AUTHORITY\Прошедшие проверку:(I)(M)
 NT AUTHORITY\Прошедшие проверку:(I)(OI)(CI)(IO)(M)
 Обязательная метка\Низкий обязательный уровень:(OI)(CI)(NW)

[C:\Temp\mozilla-temp-files]
 BUILTIN\Администраторы:(I)(F)
 BUILTIN\Администраторы:(I)(OI)(CI)(IO)(F)
 NT AUTHORITY\система:(I)(F)
 NT AUTHORITY\система:(I)(OI)(CI)(IO)(F)
 BUILTIN\Пользователи:(I)(OI)(CI)(RX)
 NT AUTHORITY\Прошедшие проверку:(I)(M)
 NT AUTHORITY\Прошедшие проверку:(I)(OI)(CI)(IO)(M)

[C:\Temp\pdk-Inquisitor]
 BUILTIN\Администраторы:(I)(F)
 BUILTIN\Администраторы:(I)(OI)(CI)(IO)(F)
 NT AUTHORITY\система:(I)(F)
 NT AUTHORITY\система:(I)(OI)(CI)(IO)(F)
 BUILTIN\Пользователи:(I)(OI)(CI)(RX)
 NT AUTHORITY\Прошедшие проверку:(I)(M)
 NT AUTHORITY\Прошедшие проверку:(I)(OI)(CI)(IO)(M)
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:44, 24-07-2013 | #8


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


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

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


Anonymоus, просто супер, спасибо!

Отправлено: 07:34, 25-07-2013 | #9



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Прочее - Настройка разрешений 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




 
Переход