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"




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

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

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 08:40 am
Powered by Dreamwidth Studios