hroft_clone3: (Default)
[personal profile] hroft_clone3
Создаем периодическую структуру в файловой системе с тонкой раздачей прав доступа

Создаем общий ресурс Public. В одном из каталогов громадная структура однотипных папок с одинаковой внутренней структурой. На каждую подпапку в этой структуре надо установить индивидуальные права доступа. На каждую папку назначаются через группы доступа - "ТолькоЧтение", "ЧтениеЗапись" и "ЗапретДоступа". В результате, например, для раздачи на восемь подпапок одного элемента этой структуры нужно создать 25 групп доступа и выставить права на все папки. Если таких папок штук 30 ...



У нас есть в задании создание большого количества папок с одной и той же структурой подпапок.
На каждую подпапку надо наложить права доступа Deny Read Write



Таких структур может быть много, соответственно, руками выставлять права сложно.
Будем использовать PowerShell





#
# Создание подпапки и установка прав на нее
# Имена групп доступа создаются по принципу <имя родительского каталога>+" "+<Имя каталога>+" R|W|D" 
#

function Set-F {
 Param (  [PARAMETER(Mandatory=$True)][String]$Root_,  #  Имя родительского каталога
          [PARAMETER(Mandatory=$True)][String]$Fold    #  Имя доччернего каталога
        )
   mkdir $fold                                         #  Создаем каталог (если каталог существует, на экран выскочит сообщение об этом, но работе скрипта не помешает
   $__f = $fold
   $__f1 = "NetbiosDomainName\"+$Root_+" "+$fold+" D"  #  Собираем полное имя группы доступа

   $acl = Get-ACL "$__f"                               #  Считываем ACL таблицу
   $Rule=new-object System.Security.AccessControl.FileSystemAccessRule "$__f1","FullControl","ContainerInherit", "None","Deny"
                                                       #  Заполняем структуру таблицы ACL правами доступа для выбранной папки
   $acl.AddAccessRule($Rule)                           #  Добавляем нужные права на папку
   Set-Acl  "$__f" -AclObject $acl                     #  Применяем изменения
Write-output $__f1                                     #  Выводим имя обработанной папки


                                                       #  Повторяем для других групп доступа  
   $acl = Get-ACL "$__f"
   $__f1 = $userdomain+"MK\"+$Root_+" "+$fold+" R"
   $Rule1=new-object System.Security.AccessControl.FileSystemAccessRule "$__f1","Read","ContainerInherit", "None","Allow"
   $acl.AddAccessRule($Rule1)
   Set-Acl  "$__f" -AclObject $acl
Write-output $__f1
   
   $acl = Get-ACL "$__f"
   $__f1 = $userdomain+"MK\"+$Root_+" "+$fold+" W"
   $Rule2=new-object System.Security.AccessControl.FileSystemAccessRule "$__f1","Read,Write,Modify,ReadData,CreateFiles,Delete,ExecuteFile,DeleteSubdirectoriesAndFiles","ContainerInherit", "None","Allow"
   $acl.AddAccessRule($Rule2)
   Set-Acl  "$__f" -AclObject $acl
Write-output $__f1

}
#
#  Создание элемента периодической структуры
#



Function Set-All {
  Param ( [PARAMETER(Mandatory=$True)][String]$RootF )     #  Для какого элемента структуры создаем подкаталоги и раздаем права

    mkdir $RootF                                           #  Создаем этот каталог 
    cd $RootF                                              #  Делаем его текущим
write-output $RootF                                        #  Выводим информацию о том, с каким каталогом работаем
    $_f1 = "folder 1"                                      #  Описываем структуру подкаталогов
    $_f2 = "folder 2"
    $_f3 = "folder 3"                     
    $_f4 = "folder 4"                     
    $_f5 = "folder 5"                 
    $_f6 = "folder 6"                  
    $_f7 = "folder 7"                 
    $_f8 = "folder 8"

  Set-F -Root_ "$RootF" -Fold "$_f1"                       #  Создаем каталог и устанавливаем права
  Set-F -Root_ "$RootF" -Fold "$_f2"
  Set-F -Root_ "$RootF" -Fold "$_f3"
  Set-F -Root_ "$RootF" -Fold "$_f4"
  Set-F -Root_ "$RootF" -Fold "$_f5"
  Set-F -Root_ "$RootF" -Fold "$_f6"
  Set-F -Root_ "$RootF" -Fold "$_f7"
  Set-F -Root_ "$RootF" -Fold "$_f8"
     cd ..                                                 #  Возвращаемся в родительский каталог



}

$folder = "Элемент структуры 1"
Set-All -RootF "$folder"
$folder = "Элемент структуры 2"
Set-All -RootF "$folder"
#   Сколько нужно одинаковых структур
$folder = "Элемент структуры N"
Set-All -RootF "$folder"




Скрипт исполняется из каталога, внутри которого надо построить структуру

Date: 2021-02-10 02:54 pm (UTC)
From: [identity profile] lj-frank-bot.livejournal.com
Здравствуйте!
Система категоризации Живого Журнала посчитала, что вашу запись можно отнести к категории: IT (https://www.livejournal.com/category/it?utm_source=frank_comment).
Если вы считаете, что система ошиблась — напишите об этом в ответе на этот комментарий. Ваша обратная связь поможет сделать систему точнее.
Фрэнк,
команда ЖЖ.

Date: 2021-02-10 02:56 pm (UTC)
From: [identity profile] hroft-clone3.livejournal.com
Да, на этот раз точно угадал

Date: 2021-02-10 02:58 pm (UTC)
From: [identity profile] lj-frank-bot.livejournal.com
Замечательно

Date: 2021-02-14 07:58 am (UTC)
From: [identity profile] velosiped-i-kot.livejournal.com
Привеееет))
Напишу, пожалуй, сюда.
Помнишь, ты под моим постом в комментарии оставил код, который показывает юзерпик того, кто это читает? А есть что-то подобное с именем пользователя?
И типо зашел и видишь и свой юзерпик и никнейм.
Хочу сегодня всех пранкануть.

Date: 2021-02-17 02:31 am (UTC)
From: [identity profile] hroft-clone3.livejournal.com
Привет

Не, не помню такой штуки

Profile

hroft_clone3: (Default)
hroft_clone3

March 2026

S M T W T F S
1234567
8910111213 14
15161718192021
22232425262728
293031    

Style Credit

Expand Cut Tags

No cut tags
Page generated Apr. 3rd, 2026 05:15 am
Powered by Dreamwidth Studios