вторник, 22 ноября 2016 г.

Назначение прав на папки с помощью PowerShell

Сегодня поступила задача изменить права в библиотеке. Т.е. нужно назначить права на каждую папку в корне библиотеке и права на две вложенные папки.

структура такова:

Библиотека документов
                |
                |
                |- Вендор Avast (персональные права на папку)
                |                              |
                |                              |- Папка 1
                |                              |-Маркетинговые материалы (персональные права)
                |                              |-Лицензионные формы (персональные права)
                |                              |-Папка N
                |
                |- Вендор Eset (персональные права на папку)
                |                              |
                |                              |- Папка 1
                |                              |-Маркетинговые материалы (персональные права)
                |                              |-Лицензионные формы (персональные права)

                |                              |-Папка N





1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
$web = Get-SPWeb http://sp-test/sites/site
$lib = $web.lists["Библиотека для портала"]
$rootFolder = $lib.RootFolder.SubFolders
 
 
function AddPermissionToFolderGroup ($folder, $GroupName, $PermissionLevel)
{   
    Write-Host $folder "/" $GroupName  "/" $PermissionLevel
 
    $group = $web.SiteGroups[$GroupName]
    $roleAssignment = new-object Microsoft.SharePoint.SPRoleAssignment($group)
    $roleDefinition = $web.RoleDefinitions[$PermissionLevel];
    $roleAssignment.RoleDefinitionBindings.Add($roleDefinition);
    $folder.Item.BreakRoleInheritance($true);
    $folder.Item.RoleAssignments.Add($roleAssignment);
       
}
function RemooveAllFolderPermission ($folder){
    $folder.Item.ResetRoleInheritance()
    $folder.Item.BreakRoleInheritance($false);
}
 
foreach($folder in $rootFolder){
    $groupName "Вендор "+$folder.Name
 
    # Определяем набор прав для папок
    $permissionsRootFolder = @(
  ($groupName,"Совместная работа"),
  ("Все пользователи","Read"),
  ("Технические специалисты","Совместная работа")
  );
    $permissionsSubFolderLicenseForm = @(
   ("Редакторы лицензионных форм","Совместная работа"),
   ("Все пользователи","Read")
   );
 $permissionsSubFolderMarketing = @(
   ($groupName,"Совместная работа"),
   ("Продуктовые маркетологи","Совместная работа"),
   ("Все пользователи","Read")
   );
    # удаляем права с папки верхнего уровня
    RemooveAllFolderPermission $folder
    # назначаем права на папку верзнего уровня
    foreach($perm in $permissionsRootFolder){
       Write-Host $perm[0] / $perm[1]
       AddPermissionToFolderGroup -folder $folder`
         -GroupName  $perm[0]`
         -PermissionLevel  $perm[1] 
    };
    foreach($subFolder in $folder.SubFolders){       
        if($subFolder.Name -eq "Маркетинговые материалы"){
             
            RemooveAllFolderPermission $subFolder
 
            foreach($perm in $permissionsSubFolderMarketing){
               Write-Host $perm[0] / $perm[1]
               AddPermissionToFolderGroup -folder $subFolder`
        -GroupName  $perm[0]`
        -PermissionLevel  $perm[1] 
            };   
        };
        if($subFolder.Name -eq "Лицензионные формы"){
 
            RemooveAllFolderPermission $subFolder
 
            foreach($perm in $permissionsSubFolderLicenseForm ){
               Write-Host $perm[0] / $perm[1]
               AddPermissionToFolderGroup -folder $subFolder `
          -GroupName  $perm[0]`
          -PermissionLevel  $perm[1] 
            };   
        };    
         
    }                          
 
}
$web.Dispose()
Вот такой код у меня получился. Помогает быстро назначить права на большое количество папок и можно переопределить права и запустить вновь.
Результат прав для папки верхнего уровня


Комментариев нет:

Отправить комментарий