Компьютерный форум 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=311197)

MMariarti 05-02-2016 07:54 2602703

Создать папки и раздать им права
 
Здравствуйте, помогите с решением проблемы, мне нужно создать ряд папок, скажем 1,2,3 ....(отделы), в каждой папке 3-4 папки с фамилиями и к папкам с фамилиями дать полные права всем, а папкам 1,2,3... (названия отделов) дать только на чтение всем, я полазал по форуму и нашел статью где скрипт берет из текстового файла имена папок и создает их (мне это понравилось и подходит, при необходимости можно в txt добавить новое ФИО или удалить старое или перенести в другой отдел), но там они не стали расписывать всю технологию и ушли в аську. Помогите пожалуйста написать скрипт
P.S. вот тема которую я нашел http://forum.oszone.net/thread-147058.html

Kazun 05-02-2016 09:40 2602720

PowerShell:

Код:

# Создадим папки для примера
md D:\Отделы
# Название отделов
1,2,3 | Foreach {md "D:\Отделы\$_"}
# Фамилии
"Иванов","Петров","Сидоров" | Foreach {md "D:\Отделы\1\$_"}

Get-ChildItem D:\Отделы | Where {$_.PsIsContainer} | Foreach {
        icacls $_.FullName /inheritance:r /grant "Все:(OI)(CI)(IO)F" /grant "Все:R"
}

icacls $_.FullName /inheritance:r /grant "Все:(OI)(CI)(IO)F" /grant "Все:R" - убираем наследования и удаляем все предыдущие права, на основную паку дает Всем - чтение, на подпапки - Всем - Полный доступ.

MMariarti 08-02-2016 06:13 2603576

Все отлично создается, прям то что нужно, с правами только затык, я поменял группу ВСЕ на Обмен (в ней сидят пользователи которым будет разрешен этот ресурс), в безопасности все права появились, вот только пользователи не могут ничего создать или удалить в папках "Иванов","Петров","Сидоров" хотя они состоят в группе Обмен и у них полные права. Может стоит добавить "прошедшие проверку" и "система" ? я по аналогии добавил "Администратор"
icacls $_.FullName /inheritance:r /grant "Администратор:R" /grant "Администратор:R", но на именных папках он не встал, подскажете что не так сделал?

MMariarti 08-02-2016 06:30 2603577

Вот то что я изменил, 2-ую строку закоментил, чтобы он не пере создавал мой ресурс(может в этом проблема)

Код:

# Создадим папки для примера
#md D:\Exchange\Администрация\Обмен
# Название отделов
"Руководство","ОИТ","ОКС" | Foreach {md "D:\Exchange\Администрация\Обмен\$_"}
# Фамилии
"Иванов","Петров","Сидоров" | Foreach {md "D:\Exchange\Администрация\Обмен\Руководство\$_"}
"Иванов","Петров" | Foreach {md "D:\Exchange\Администрация\Обмен\ОИТ\$_"}
"Иванов" | Foreach {md "D:\Exchange\Администрация\Обмен\ОКС\$_"}

Get-ChildItem D:\Exchange\Администрация\Обмен | Where {$_.PsIsContainer} | Foreach {
    icacls $_.FullName /inheritance:r /grant "Обмен:(OI)(CI)(IO)F" /grant "Обмен:R"
    icacls $_.FullName /inheritance:r /grant "Администратор:R" /grant "Администратор:R"
}

папок будет больше, поэтому мне и нужно понять что я делаю не так, огромное человеческое спасибо за понимание и помощь

Iska 08-02-2016 08:50 2603607

Цитата:

Цитата MMariarti
Вот то что я изменил, 2-ую строку закоментил, чтобы он не пере создавал мой ресурс(может в этом проблема) »

«Пересоздать» уже существующий каталог невозможно, не переживайте.

MMariarti 10-02-2016 04:40 2604356

Прошу прощения за излишнею самоуверенность, сам накосячил с правами доступа к папке "Обмен", разобрался. Но у меня еще одна дилемма: конечный пользователь имеет полный доступ на папки "Иванов","Петров","Сидоров", а это означает что, скажем Петров "неумышленно" может удалить папку "Иванова" и тот в какой-то промежуток времени не получит или потеряет важную информацию. И тут я недостойный и тщедушный, раболепно и с безмерным уважением к Вам о Великие знатоки тысяч и тысяч языков программирования, прошу подсказать что нужно добавить в скрипт, чтобы запретить удаление конечной папки "Иванов","Петров","Сидоров".

Kazun 10-02-2016 11:31 2604448

Теперь четко и ясно сформулируйте задачу по пунктам.

- Структура папок
- Права на каждую папку и подпапку
- Как соотносится папка-пользователь

MMariarti 11-02-2016 03:46 2604756

Вложений: 1
1.Обмен
____|___2.Приемная
___________|__3.Иванов
___________|__3.Петров

Петров и Иванов имеют полный доступ во всех папках третьего уровня, но удалять эти папки они не должны, в папках 1 и 2 уровня могут только читать.
Скрипт который вы написали все делает как надо, создает отделы (1,2,3,) -> в каждом отделе создает именные папки (Иванов, Петров, Сидоров) дает права на отделы "только чтение" (правильно) и именные папки "полный доступ". Нужно чтобы пользователь не мог удалить именные папки (Иванов, Петров, Сидоров). я руками добавил запрет, удалять, в безопасности (скрин прилагаю). То есть у папок Иванов, Петров, Сидоров нужны права на полный доступ и запрет на удаление самой папки Иванов, Петров, Сидоров, и получается что пользователь не может удалить именную папку , а внутри нее может делать все что ему вздумается. Заранее спасибо.

Kazun 11-02-2016 11:37 2604856

Код:

# Создадим папки для примера
md D:\Отделы
# Название отделов
1,2,3 | Foreach {md "D:\Отделы\$_"}
# Фамилии
"Иванов","Петров","Сидоров" | Foreach {md "D:\Отделы\1\$_"}

Get-ChildItem D:\Отделы | Where {$_.PsIsContainer} | Foreach {
        icacls $_.FullName /inheritance:r /grant "Все:R"
}

Get-ChildItem D:\Отделы\*\* | Where {$_.PsIsContainer} | Foreach {
        icacls $_.FullName /inheritance:r /grant "Все:(OI)(CI)(F)" /T
        $acl = Get-ACl $_.FullName
        $rule = New-Object System.Security.AccessControl.FileSystemAccessRule("Все","DeleteSubdirectoriesAndFiles, Delete, ChangePermissions, TakeOwnership","None","None","Deny")
        $acl.AddAccessRule($rule)
        Set-Acl -Path $_.FullName -AclObject $acl
}



Время: 03:18.

Время: 03:18.
© OSzone.net 2001-