Лучший отвечающий
создание ntfs шары на основе organization unit

Вопрос
-
Приветствую коллеги. Есть задумка автоматизировать создание шары для домена. Раньше все файлы располагались на др ресурсе. Сейчас есть большой organization unit с подгруппами, где на самом нижнем уровне есть 2 группы (папки) - пользователи и компьютеры. Такая своеобразная иерархия по месторасположению и подразделениям в AD. На этом же серваке есть корень шары с правами всем на чтение и изменение. Теперь нужно сделать кучу подпапок и сделать им соответствующие ntfs разрешения - каждое подразделение может просматривать и изменять файлы только в своей папке. Вручную столько кликов мышкой осилю только дня за 2 :) Кто-нибудь делал подобное? Нашел powershell-for-creating-secure-user но там список пользователей берется из файла а не из AD.18 июля 2013 г. 7:54
Ответы
-
# Корень $folder = "C:\Обмен" $gsr = @() $grw = @() # Получим все районы $r = Get-ADOrganizationalUnit -Filter * -SearchBase "ou=main,dc=fire37,dc=ru" -SearchScope OneLevel # Создадим районы $r | Foreach { $f = Join-Path $folder $_.Name if(!(Test-Path $f)) { md $f | Out-Null } } # Создадим службы $grs = $r | Foreach { $n = $_.Name Get-ADOrganizationalUnit -Filter * -SearchBase $_.DistinguishedName -SearchScope OneLevel | Foreach { $f = Join-Path $folder "$n\$($_.name)" if(!(Test-Path $f)) { md $f } } } # Создадим группы и добавим пользователей $r | Foreach { $n = $_.Name # Получим службы в OU Get-ADOrganizationalUnit -Filter * -SearchBase $_.DistinguishedName -SearchScope OneLevel | Foreach { $users = Get-ADUser -Filter * -SearchBase $_.DistinguishedName # Создадим группу RW_Отдел_Служба $nw = "RW_$n`_$($_.name)" $gw = New-ADGroup -Name $nw -GroupCategory Security -GroupScope Global -PassThru Add-ADGroupMember -Identity $gw -Members $users # Создадим группу RW_Отдел_Служба $nr = "R_$n`_$($_.name)" $gr = New-ADGroup -Name $nr -GroupCategory Security -GroupScope Global -PassThru Add-ADGroupMember -Identity $gr -Members $users $gsr += $gr.name $grw += $gw.name } } # Назначим права $grs | Group Name | Foreach { if($_.Count -gt 1) { $_.Group | Foreach { $gr = "RW_$($_.Parent.Name)_$($_.Name)" $acl = Get-Acl $_.FullName if($grw -eq $gr) { $acl.SetAccessRuleProtection($true,$false) $rule = New-Object Security.AccessControl.FileSystemAccessRule($gr,"Read,Write","ContainerInherit, ObjectInherit","None","Allow") $acl.AddAccessRule($rule) } if($gsr -match "_$($_.Name)$") { $gsr -match "_$($_.Name)$" -notmatch "R_$($_.Parent.Name)_" | Foreach { $rule = New-Object Security.AccessControl.FileSystemAccessRule($_,"Read","ContainerInherit, ObjectInherit","None","Allow") $acl.AddAccessRule($rule) } } $acl | Set-Acl $_.FullName } } else { $f = $_.Group $gr = "RW_$($f.Parent.Name)_$($f.Name)" if($grw -eq $gr) { $acl = Get-Acl $f.FullName $acl.SetAccessRuleProtection($true,$false) $rule = New-Object Security.AccessControl.FileSystemAccessRule($gr,"Read,Write","ContainerInherit, ObjectInherit","None","Allow") $acl.AddAccessRule($rule) $acl | Set-Acl $f.FullName } } }
- Помечено в качестве ответа kosmich74 19 июля 2013 г. 17:52
19 июля 2013 г. 9:53Отвечающий
Все ответы
-
Нарисуйте структуру, а то плохо понятно.
1) А зачем добавлять пользователей, в чем проблема создать группу безопасности?
2) Так шару создать или назначить ntfs разрешения ?
18 июля 2013 г. 8:06Отвечающий -
структура OU начиная с корня: main -> район (17 шт) -> служба (по 15 в каждом, одних и тех же во всех районах за редким исключением) -> пользователи. Такой же структуры надо создать шару: Обмен -> Название района(17 папок) -> название службы (15 папок). Необходимо чтобы пользователи каждой службы имели права на чтение\запись в своей папке своего района и только на чтение в одноименной папке другого района, остальные папки даже просматривать нельзя. Шару создать делов не много - она есть, всем пользователям данного OU назначил smb права на чтение и запись. А вот как с помощью powershell всем папкам ntfs разрешения изменить на те что требуются...18 июля 2013 г. 14:27
-
# Корень $folder = "C:\Обмен" $gsr = @() $grw = @() # Получим все районы $r = Get-ADOrganizationalUnit -Filter * -SearchBase "ou=main,dc=fire37,dc=ru" -SearchScope OneLevel # Создадим районы $r | Foreach { $f = Join-Path $folder $_.Name if(!(Test-Path $f)) { md $f | Out-Null } } # Создадим службы $grs = $r | Foreach { $n = $_.Name Get-ADOrganizationalUnit -Filter * -SearchBase $_.DistinguishedName -SearchScope OneLevel | Foreach { $f = Join-Path $folder "$n\$($_.name)" if(!(Test-Path $f)) { md $f } } } # Создадим группы и добавим пользователей $r | Foreach { $n = $_.Name # Получим службы в OU Get-ADOrganizationalUnit -Filter * -SearchBase $_.DistinguishedName -SearchScope OneLevel | Foreach { $users = Get-ADUser -Filter * -SearchBase $_.DistinguishedName # Создадим группу RW_Отдел_Служба $nw = "RW_$n`_$($_.name)" $gw = New-ADGroup -Name $nw -GroupCategory Security -GroupScope Global -PassThru Add-ADGroupMember -Identity $gw -Members $users # Создадим группу RW_Отдел_Служба $nr = "R_$n`_$($_.name)" $gr = New-ADGroup -Name $nr -GroupCategory Security -GroupScope Global -PassThru Add-ADGroupMember -Identity $gr -Members $users $gsr += $gr.name $grw += $gw.name } } # Назначим права $grs | Group Name | Foreach { if($_.Count -gt 1) { $_.Group | Foreach { $gr = "RW_$($_.Parent.Name)_$($_.Name)" $acl = Get-Acl $_.FullName if($grw -eq $gr) { $acl.SetAccessRuleProtection($true,$false) $rule = New-Object Security.AccessControl.FileSystemAccessRule($gr,"Read,Write","ContainerInherit, ObjectInherit","None","Allow") $acl.AddAccessRule($rule) } if($gsr -match "_$($_.Name)$") { $gsr -match "_$($_.Name)$" -notmatch "R_$($_.Parent.Name)_" | Foreach { $rule = New-Object Security.AccessControl.FileSystemAccessRule($_,"Read","ContainerInherit, ObjectInherit","None","Allow") $acl.AddAccessRule($rule) } } $acl | Set-Acl $_.FullName } } else { $f = $_.Group $gr = "RW_$($f.Parent.Name)_$($f.Name)" if($grw -eq $gr) { $acl = Get-Acl $f.FullName $acl.SetAccessRuleProtection($true,$false) $rule = New-Object Security.AccessControl.FileSystemAccessRule($gr,"Read,Write","ContainerInherit, ObjectInherit","None","Allow") $acl.AddAccessRule($rule) $acl | Set-Acl $f.FullName } } }
- Помечено в качестве ответа kosmich74 19 июля 2013 г. 17:52
19 июля 2013 г. 9:53Отвечающий -
Огромное спасибо. Отличный код - буду учиться.19 июля 2013 г. 17:52