Создание множества каталогов на файл-сервере

Продолжаю делиться своими наработками на Powershell.

В больших организациях обычно стараются стандартизировать большинство ИТ сервисов и процессов. Это касается и файл-сервиса.

Практически все стандарты на файл-сервис, которые я видел, сводились к тому, что на файл сервере создается структура каталогов, на каждый из которых назначаются различные доступы. Обычно на каждый каталог приходится по две группы безопасности: чтение и изменение. Часто группы назначают только на один уровень иерархии, иногда на несколько.

Каталоги, как правило, создаются для каждого отдела/подразделения компании.

В связи с масштабами возникает желание автоматизировать рутину: для каждого каталога создание двух групп безопасности в AD, создание каталога, назначение прав на каталоге для указанных групп. Наиболее актуально это в организациях с множеством филиалов, собственно почему и родился данный скрипт:

$branch = «Mgn»
$branchrus = «Магнитогорск»

$dirs = @(
‘Temp’,
‘Distr’,
‘Multimedia’,
‘SoftwareDistribution’,
‘SharedSoft’,
‘Documents\Формы и бланки’,
‘Documents\Регламенты и стандарты’,
‘Documents\Администрация’,
‘Documents\Секретариат’,
‘Documents\Юридический отдел’,
‘Documents\Планово-экономический отдел’,
‘Documents\Бухгалтерия’,
‘Documents\Отдел управления персоналом’,
‘Documents\Отдел маркетинга’,
‘Documents\Отдел продаж’,
‘Documents\Отдел РКК’,
‘Documents\Абонентский отдел’,
‘Documents\Административно-хозяйственный отдел’,
‘Documents\Служба технического сервиса’,
‘Documents\Производственно-технический отдел’,
‘Documents\Отдел логистики’,
‘Documents\Отдел эксплуатации сети’,
‘Documents\Отдел ИТ’,
‘Documents\Отдел согласований’,
‘Documents\Инвентаризация’
)

# устанавливаем права на разделы
$acl = New-Object System.Security.AccessControl.DirectorySecurity
$addacl = New-Object System.Security.AccessControl.FileSystemAccessRule(«NT AUTHORITY\SYSTEM», «FullControl», «ContainerInherit, ObjectInherit», «None», «Allow»)
$acl.AddAccessRule($addacl)
$addacl = New-Object System.Security.AccessControl.FileSystemAccessRule(«BUILTIN\Administrators», «FullControl», «ContainerInherit, ObjectInherit», «None», «Allow»)
$acl.AddAccessRule($addacl)
Set-Acl D: -AclObject $acl

# Создаем корень
md D:\FS
net share FS=D:\FS /GRANT:»everyone,CHANGE»
# права на корень
$acl = New-Object System.Security.AccessControl.DirectorySecurity
$addacl = New-Object System.Security.AccessControl.FileSystemAccessRule(«DOMAIN\Domain Users», «Read», «ContainerInherit, ObjectInherit», «None», «Allow»)
$acl.AddAccessRule($addacl)
Set-Acl D:\FS -AclObject $acl

# перебираем каталоги
$AD = [ADSI]»LDAP://domain.loc:389/OU=Groups,OU=$branch,DC=domain,DC=loc»
$dirs | % {
echo $_
$dir = $_
$dirname = Split-Path $dir -Leaf
# создаем группу
$group = $AD.Create(«group», «CN=FS_$($dirname)_чтение_$branchrus»)
$group.Put(‘sAMAccountName’, «FS_$($dirname)_чтение_$branchrus»)
$group.SetInfo()
$group = $AD.Create(«group», «CN=FS_$($dirname)_запись_$branchrus»)
$group.Put(‘sAMAccountName’, «FS_$($dirname)_запись_$branchrus»)
$group.SetInfo()
# создаем каталог
md «D:\FS\$dir»
# устанавливаем соответствующие права
$acl = New-Object System.Security.AccessControl.DirectorySecurity
$addacl = New-Object System.Security.AccessControl.FileSystemAccessRule(«NT AUTHORITY\SYSTEM», «FullControl», «ContainerInherit, ObjectInherit», «None», «Allow»)
$acl.AddAccessRule($addacl)
$addacl = New-Object System.Security.AccessControl.FileSystemAccessRule(«BUILTIN\Administrators», «FullControl», «ContainerInherit, ObjectInherit», «None», «Allow»)
$acl.AddAccessRule($addacl)
$addacl = New-Object System.Security.AccessControl.FileSystemAccessRule(«DOMAIN\FS_$($dirname)_чтение_$branchrus», «ReadAndExecute», «ContainerInherit, ObjectInherit», «None», «Allow»)
$acl.AddAccessRule($addacl)
$addacl = New-Object System.Security.AccessControl.FileSystemAccessRule(«DOMAIN\FS_$($dirname)_запись_$branchrus», «Modify», «ContainerInherit, ObjectInherit», «None», «Allow»)
$acl.AddAccessRule($addacl)
# снимаем наследование
$acl.SetAccessRuleProtection($true, $false)
Set-Acl «D:\FS\$dir» -AclObject $acl
}

Скрипт также корректирует права на корень диска и создает шару.

Запись опубликована в рубрике Microsoft, Windows с метками . Добавьте в закладки постоянную ссылку.

Один комментарий: Создание множества каталогов на файл-сервере

  1. sergm говорит:

    В дополнении надо еще написать скрипт который проверяет правильность разрешений. Алгоритм прост — выгружаем в файл acl, потом сравниваем то что есть с эталонным. Если что сигнализируем админу.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *