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

Ответить
Аватара пользователя
yanus74

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

Сообщение yanus74 »

Здравствуйте!

Появилась необходимость провести аудит файловых ресурсов.

Для этих целей подошел бы скрипт, а вот тут я не силен, и прошу помощи у сообщества.

Задача стоит такая

входные данные: путь к папке с которой необходимо собрать данные ( что-то вроде 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.*" - уровень папки от родительской

можно уровень папки заменить на полный путь ^.^



Если есть другой способ получить желаемое, рад буду услышать совет.

Заранее спасибо за помощь!
Аватара пользователя
yanus74

Re: CMD/BAT - [решено] парсинг NTFS разрешений каталога и подкаталогов

Сообщение yanus74 »

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

Спасибо за ссылку на программу, сейчас испробую ее.
Аватара пользователя
yanus74

Re: CMD/BAT - [решено] парсинг NTFS разрешений каталога и подкаталогов

Сообщение yanus74 »

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 файлов
Аватара пользователя
yanus74

Re: CMD/BAT - [решено] парсинг NTFS разрешений каталога и подкаталогов

Сообщение yanus74 »

я тут подумал, примерно должен быть такой алгоритм:



Код:

Код: Выделить всё

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 строку)
Аватара пользователя
Guest

Re: CMD/BAT - [решено] парсинг NTFS разрешений каталога и подкаталогов

Сообщение Guest »

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%"
)
Аватара пользователя
yanus74

Re: CMD/BAT - [решено] парсинг NTFS разрешений каталога и подкаталогов

Сообщение yanus74 »

Anonymоus, спасибо!

но тут такая проблемка проявилась, результаты работы скрипта, не получиться парсить автоматически.

дело в том, что результат выполнения icacls выглядит таким образом:

d:\шара Все:(OI)(CI)(F)

между d:\шара и Все:(OI)(CI)(F) есть пробел.

а т.к. пробелы также присутствую и в названиях каталогов, то из-за этого не получится корректно разделить путь и права доступа.

я тут подумал, что можно как-то модифицировать скрипт.

что бы в тхт файл result записывался путь каталога из %%A, а в результате вывода icacls вырезать этот путь.

Можете модифицировать скрипт, с учетом этого момента?)

Спасибо вам за помощь!
Аватара пользователя
Guest

Re: CMD/BAT - [решено] парсинг NTFS разрешений каталога и подкаталогов

Сообщение Guest »

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

Лог тогда получается вот в таком формате:


Показать лог




Код:

Код: Выделить всё

[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)
Ответить

Вернуться в «Скриптовые языки администрирования Windows»