Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Создать кучу папок, дать разрешения. (http://forum.oszone.net/showthread.php?t=147058)

senseye 04-08-2009 12:58 1185172

Создать кучу папок, дать разрешения.
 
Вложений: 1
Добрый день!

есть следующая структура:
есть папка Workplace, в ней папки, соответствующие каждой букве английского алфавита (A, B, C, D ... Z), в каждой "букве" куча папок соответствующих названиям компаний - партнеров, в них еще 6 папок, на которые нужно разные доступы разным группам дать.
Задача:
Создать в папках - буквах папки - партнеры и в них создать по 6 папок. и назначить на все это безобразие соответствующие права доступа.

привожу схему для наглядности:

NiOl 04-08-2009 13:23 1185199

1. Непонятно, откуда брать названия партнеров. Если как в примере (Партнер-1, Партнер-2, etc) то по скольку штук?
2. Непонятно, какие права доступа Вам нужны. Уточните конкретнее, например Группе "adm" ресурсы "Contacts" и "Information" полные прав, а на остальные папки - только чтение, Группе "Managers" полные права на "PriceBooks" и "Products" и т.д.

senseye 04-08-2009 14:15 1185258

1. Названия партнеров брать из зарее подготовленного списка (txt, xls, ini что удобнее)
я вижу примерно следующее:
letter: A

Astana-finance
Alma-TV
Asteros

а создавать будет примерно так:

if letter:=A then makedir F:\Workplace\A\....

ну..это конечно фантазии, но, я думаю, логика ясна. :)

2. в приведенном скрипте, написанном мной для раздачи прав, все описано.
Цитата:

xcacls Contracts /E /G "otccorporation\DL contracts FA":F
xcacls Contracts /E /G "otccorporation\Administrator":F
xcacls Contracts /E /G "otccorporation\DL contracts RO":R
xcacls Information /E /G "otccorporation\DL Information FA":F
xcacls Information /E /G "otccorporation\Administrator":F
xcacls Information /E /G "otccorporation\DL Information RO":R
xcacls Other Correspondence /E /G "otccorporation\DL other correspondence FA":F
xcacls Other Correspondence /E /G "otccorporation\Administrator":F
xcacls Pricebooks /E /G "otccorporation\DL Pricebooks FA":F
xcacls Pricebooks /E /G "otccorporation\Administrator":F
xcacls Pricebooks /E /G "otccorporation\DL Pricebooks RO":R
xcacls Products /E /G "otccorporation\DL Products FA":F
xcacls Products /E /G "otccorporation\Administrator":F
xcacls Products /E /G "otccorporation\DL Products RO":R
xcacls Projects /E /G "otccorporation\DL Projects FA":F
xcacls Projects /E /G "otccorporation\Administrator":F

NiOl 04-08-2009 14:53 1185291

Вот, наверно так можно (ошибки не отрабатываются, но можно добавить вывод %ErrorLevel% в лог-файл):

Код:

@Echo Off
SetLocal EnableDelayedExpansion

set Wrk=C:\Temp
set List=C:\Partners.txt

for /F "Tokens=* Delims=" %%P in (%List%) do (
cd /D %Wrk%
Title Preparing "%%P"
set Letter=%%P
set Letter=!Letter:~0,1!
if not exist !Letter! md !Letter!
cd !Letter!
if not exist "%%P" md "%%P"
cd "%%P"
for %%N in (Contracts,Information,"Other Correspondence",Pricebooks,Products,Projects) do md %%N
rem Далее Ваш скрипт, только на счет "Xcacls" я не уверен - ни в XP-SP3 ни в W2k3SP1 такой команды не нашел...

cacls Contracts /E /G "otccorporation\DL contracts FA":F
cacls Contracts /E /G "otccorporation\Administrator":F
cacls Contracts /E /G "otccorporation\DL contracts RO":R
cacls Information /E /G "otccorporation\DL Information FA":F
cacls Information /E /G "otccorporation\Administrator":F
cacls Information /E /G "otccorporation\DL Information RO":R
cacls Other Correspondence /E /G "otccorporation\DL other correspondence FA":F
cacls Other Correspondence /E /G "otccorporation\Administrator":F
cacls Pricebooks /E /G "otccorporation\DL Pricebooks FA":F
cacls Pricebooks /E /G "otccorporation\Administrator":F
cacls Pricebooks /E /G "otccorporation\DL Pricebooks RO":R
cacls Products /E /G "otccorporation\DL Products FA":F
cacls Products /E /G "otccorporation\Administrator":F
cacls Products /E /G "otccorporation\DL Products RO":R
cacls Projects /E /G "otccorporation\DL Projects FA":F
cacls Projects /E /G "otccorporation\Administrator":F
)

файл с фирмами должен иметь такой вид:
Код:

Allergy
Anatoly Vasserman inc.
Booze
Cactus & co
Chlamydia Beauty Industrial
и т.д.


senseye 04-08-2009 15:52 1185360

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

NiOl 04-08-2009 16:32 1185404

:o ... :lol:

Поясняю работу скрипта:
в переменные Wrk и List (кстати извиняюсь - там остались значения, на которых этот скрипт и тестил) вписывается полный путь к Вашей папке (Workplace кажется) и путь с именем файла списка фирм.

Далее в цикле из файла выбирается очередная фирма, от нее выделяется первая буква для раскладывания по каталогам A-B-C-D...W-Z, создается дерево каталогов Буква-Фирма, внутри создается пачка Ваших стандартных каталогов Contracts .. Projects и для них назначаются права по Вашему скрипту.
... из списка выбирается следующая фирма и процесс повторяется до тех пор, пока не будут созданы все подкаталоги для каждой фирмы и для каждой будут назначены права.

senseye 05-08-2009 07:25 1185924

xcacls это отдельно устанавливаемая программа, которая работает из командной строки, скрипт я проверял свой - работает нормально. Мне просто сохранить Батник нужно, так ведь? я впервые со скриптами такими дело имею )

NiOl 05-08-2009 11:31 1186072

Cоздаешь текстовый файл с расширением *.BAT, например Partners.bat
В него через буфер обмена вставляешь текст, исправляешь строки set Wrk=C:\Temp и set List=C:\Partners.txt на нужные тебе, сохраняешь и запускаешь. После чего пробегаешь по некоторым фирмам и проверяешь назначенные права.

senseye 05-08-2009 13:03 1186152

Создал файл Partners.txt написал туда "партнеров" на разные буквы начинающихся, создал папку D:/test, кинул в корень D:/ файл script_folders.bat с твоим кодом. изменил set Wrk=D:\test и set List=D:\Partners.txt , Запускаю, на долю секунды появляется черное окно командной строки, но ничего не создается, пробовал убирать cacls, не помогло, тоже самое...

NiOl 06-08-2009 17:36 1187334

Извиняюсь за задержку - была работа.
Чтож, добавляем краткий лог-файл (появится рядом с батником) и запускаем еще раз. Лог-файл прошу выложить сюда.
Можно для скорости и во избежание засирания форума (не уверен, что это по правилам форума) связаться по асе: 268808419

Код:

@Echo Off
SetLocal EnableDelayedExpansion

set Wrk=D:\Test
set List=D:\Partners.txt
set Log=%~dpn0.log

if not Exist %List% (
echo Error: List-file not found!>>%Log%
exit
)
for /F "Tokens=* Delims=" %%P in (%List%) do (
cd /D %Wrk%
echo Preparing "%%P" at !CD! (%Wrk%^) >>%Log%
Title Preparing "%%P"
set Letter=%%P
set Letter=!Letter:~0,1!
if not exist !Letter! md !Letter!
cd !Letter!
echo  ... enter !CD!>>%Log%
if not exist "%%P" md "%%P"
cd "%%P"
echo  ... enter !CD!>>%Log%
for %%N in (Contracts,Information,"Other Correspondence",Pricebooks,Products,Projects) do md %%N
dir /b /on>>%Log%

xcacls Contracts /E /G "otccorporation\DL contracts FA":F >>%Log%
xcacls Contracts /E /G "otccorporation\Administrator":F >>%Log%
xcacls Contracts /E /G "otccorporation\DL contracts RO":R >>%Log%
xcacls Information /E /G "otccorporation\DL Information FA":F >>%Log%
xcacls Information /E /G "otccorporation\Administrator":F >>%Log%
xcacls Information /E /G "otccorporation\DL Information RO":R >>%Log%
xcacls Other Correspondence /E /G "otccorporation\DL other correspondence FA":F >>%Log%
xcacls Other Correspondence /E /G "otccorporation\Administrator":F >>%Log%
xcacls Pricebooks /E /G "otccorporation\DL Pricebooks FA":F >>%Log%
xcacls Pricebooks /E /G "otccorporation\Administrator":F >>%Log%
xcacls Pricebooks /E /G "otccorporation\DL Pricebooks RO":R >>%Log%
xcacls Products /E /G "otccorporation\DL Products FA":F >>%Log%
xcacls Products /E /G "otccorporation\Administrator":F >>%Log%
xcacls Products /E /G "otccorporation\DL Products RO":R >>%Log%
xcacls Projects /E /G "otccorporation\DL Projects FA":F >>%Log%
xcacls Projects /E /G "otccorporation\Administrator":F >>%Log%
)


senseye 07-08-2009 14:15 1188164

Вложений: 1
Классно! получилось! папки создаются правильно, по первой букве фирмы, дальше - весь пучок папок в "фирме - партнере", но вот мой скрипт как то странно работает, права назначает, но совершенно левые, у меня на группы стоит назначение он назначает отдельны людям... странно вот лог:

NiOl 07-08-2009 18:18 1188405

1. Что сразу бросилось в глаза - я тупо скопировал список команд по назначению прав. В строках по назначению прав на Other Correspondence название каталога обязательно нужно заключить в кавычки - скрипт xcacls пытается назначать права каталогу Other.

2. Других ошибок не вижу. Попробуйте рукчами запустить Xcacls на кокой-нить каталог - если окажется, что вместо групп (на примере группы "DL contracts FA") права прописаны пользователям, то это дело рук скрипта Xcacls и тогда советую воспользоваться просто командой cacls - синтаксис тотже (можно добавить ключ /T), но группам права назначаются гарантированно (у меня на ней реализована автоматическая шара бэкапного диска).

3. Уточнение - "otccorporation" - это Ваш домен? Если да и компьютер, с которого скрипт запущен, также в домене, то название домена можно опускать.

senseye 10-08-2009 07:31 1189857

Цитата:

Цитата NiOl
1. Что сразу бросилось в глаза - я тупо скопировал список команд по назначению прав. В строках по назначению прав на Other Correspondence название каталога обязательно нужно заключить в кавычки - скрипт xcacls пытается назначать права каталогу Other. »

Да, Вы правы, в кавычки заключил.

Цитата:

Цитата NiOl
2. Других ошибок не вижу. Попробуйте рукчами запустить Xcacls на кокой-нить каталог - если окажется, что вместо групп (на примере группы "DL contracts FA") права прописаны пользователям, то это дело рук скрипта Xcacls и тогда советую воспользоваться просто командой cacls - синтаксис тотже (можно добавить ключ /T), но группам права назначаются гарантированно (у меня на ней реализована автоматическая шара бэкапного диска). »

Xcacls назначал все правильно, я его тестил где-то неделю :) (наверное, в силу незнания), сейчас все правильно назначилось! дело было в том, что в F:/ лежал скрипт test.bat и каким то макаром цеплялся и выполнялся :) а в нем то и были мои тесты )

Цитата:

Цитата NiOl
3. Уточнение - "otccorporation" - это Ваш домен? Если да и компьютер, с которого скрипт запущен, также в домене, то название домена можно опускать. »

пробовал, получилось не ахти :) лучше так, от этого ж хуже не становится.


идем дальше: натолько что созданную папку - партнера нужно следующее: xcacls *letter*/G "otccorporation\DL name RO":R вот тут то и затык, получается, папку создал, как то проверил что только что создал, и назначил на него разрешение...и еще, надо бы убрать наследование в скрипте...

NiOl 10-08-2009 12:26 1190030

Думаю, что на "букву" также стоит дать права Системе и админу (полные), чтобы потом не корячится.
Фирмы унаследуют права "DL name RO", Системе и админу а для Contracts .. Projects права будут без наследования (первая команда назначения без ключа /E).

Код:

@Echo Off
SetLocal EnableDelayedExpansion

set Wrk=D:\Test
set List=D:\Partners.txt
set Log=%~dpn0.log

if not Exist %List% (
echo Error: List-file not found!>>%Log%
exit
)
for /F "Tokens=* Delims=" %%P in (%List%) do (
cd /D %Wrk%
echo Preparing "%%P" at %Wrk% >>%Log%
Title Preparing "%%P"
set Letter=%%P
set Letter=!Letter:~0,1!
if not exist !Letter! (
md !Letter!
xcacls !Letter! /G "otccorporation\DL name RO":R
xcacls !Letter! /E /G System:F
xcacls !Letter! /E /G "otccorporation\Administrator":F
)
cd !Letter!
if not exist "%%P" md "%%P"
cd "%%P"
for %%N in (Contracts,Information,"Other Correspondence",Pricebooks,Products,Projects) do md %%N
dir /b /on>>%Log%

echo Y|xcacls Contracts /G "otccorporation\DL contracts FA":F
xcacls Contracts /E /G "otccorporation\Administrator":F
xcacls Contracts /E /G "otccorporation\DL contracts RO":R
echo Y|xcacls Information /G "otccorporation\DL Information FA":F
xcacls Information /E /G "otccorporation\Administrator":F
xcacls Information /E /G "otccorporation\DL Information RO":R
echo Y|xcacls Other Correspondence /G "otccorporation\DL other correspondence FA":F
xcacls Other Correspondence /E /G "otccorporation\Administrator":F
echo Y|xcacls Pricebooks /G "otccorporation\DL Pricebooks FA":F
xcacls Pricebooks /E /G "otccorporation\Administrator":F
xcacls Pricebooks /E /G "otccorporation\DL Pricebooks RO":R
echo Y|xcacls Products /G "otccorporation\DL Products FA":F
xcacls Products /E /G "otccorporation\Administrator":F
xcacls Products /E /G "otccorporation\DL Products RO":R
echo Y|xcacls Projects /G "otccorporation\DL Projects FA":F
xcacls Projects /E /G "otccorporation\Administrator":F
)

Вроде так...

senseye 12-08-2009 07:20 1191634

Прям то что надо! спасибо большое! создает, читает из файла, назначает права. благодарю!

MMariarti 05-02-2016 05:46 2602690

Здравствуйте, можно опять поднять эту тему, мне интересна самим схема и если чесно, помощь в написании скрипта, делаем батник к нему txt, с описанием необходимых папок. помогите сделать данный скрипт


Время: 10:59.

Время: 10:59.
© OSzone.net 2001-