2010-02-17 2 views
2

У меня есть сценарий POSH, который устанавливает доступ пользователя к определенной папке для чтения некоторых файлов.Удаление нежелательных прав пользователя из SharePoint

Группа пользователей присваивается папке (которая имеет одно и то же имя).

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

Этот скрипт работает отлично в течение 4 месяцев, но теперь некоторые люди хотят использовать мобильный вид, и я столкнулся с проблемой. Если у пользователя нет доступа для чтения из корневого каталога в указанную папку, просмотр мобильных устройств SharePoint не отображает эту папку.

Например, пользователь имеет следующие разрешения установить: Ограниченный доступ на корню Ограниченный доступ на папку Альфа доступ на чтение к папке под Альфа

мне нужно сделать так, пользователь может просматривать этот в мобильном режиме.

Вот мой код:

#region Start 
# Create Connection to stopwatch diagnostics 
[Void][System.Diagnostics.Stopwatch] $sw; 
# New Stopwatch object 
$sw = New-Object System.Diagnostics.StopWatch; 
# Stop any watches that might be running 
$sw.Stop();           
$sw.Start(); 
clear 
[int]$a = 0; 
# Which folders to assign 
[array]$sections = "Alpha","Bravo","Charlie","Delta"; 
[Void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint"); 
#endregion 

#region The meat and potatoes 
foreach ($section in $sections) { 
    #region get the Directories 
    $pathtowd = "\\path\to\webdav\$section";         # UNC Path to the pivots 
    $dirs = Get-ChildItem $pathtowd | Where-Object { $_.Attributes -band [System.IO.FileAttributes]::Directory } 
    #endregion 

    #region Connect to SharePoint 
    $SPSite = New-Object Microsoft.SharePoint.SPSite("http://sharepoint");     # Connect to SharePoint 
    $OpenWeb = $SpSite.OpenWeb("/Downloads");            # Subsite of downloads 
    #endregion 
    [int]$i = 0;                   # Integer to increment 
    foreach ($dir in $dirs) { 
     $verify_groups = $OpenWeb.groups | ? {$_.Name -eq "$dir"; }       # Verify the groups 
     if ($verify_groups -ne $null) { 
      if ($dir.ToString() -eq $verify_groups.ToString()) { 
       $i++;                  # Increment the groups 
       Write-Host "[", $sw.Elapsed.ToString(), "] -",$dir -F Green;    # Output status 
       $path = "http://sharepoint/Downloads/Pivots/$section/" + $dir;    # Set the Path 
       $spc = $OpenWeb.SiteGroups;             # SharePoint connection 
       $group = $spc[$dir];              # Directory 
       $roleAssignment = New-Object Microsoft.SharePoint.SPRoleAssignment($group); # Role Assignment connection 
       $OpenWeb.GetFolder($path).Item.BreakRoleInheritance("true");    # Break inheritance 
       $roleAssignment.RoleDefinitionBindings.Add($OpenWeb.RoleDefinitions["Read"]);# Set permissions 
       $OpenWeb.GetFolder($path).Item.RoleAssignments.Add($roleAssignment);  # Add the role 
       $OpenWeb.GetFolder($path).Item.Update(); 
      } 
      else { Write-Host "[", $sw.Elapsed.ToString(), "] -", $verify_groups " is empty"; } 
     } 
    } 
    Write-Host '[' $sw.Elapsed.ToString() '] - found '$i' Folders' -f Red;     # Output Status 
    $SPSite.Dispose();                  # Dispose the connection 
    $OpenWeb.Dispose(); 
    $a = $a+$i;                    # Total Folders 
} 
#endregion 

$sw.Stop();                    # Stop the timer 
[string]$howlong = $sw.Elapsed.ToString();            # How long 
write-host "Updated in Time: " $howlong -F Green;          # Last message 
+0

Я знаю, что есть команда Item.RoleAssignments.Remove, но я не нашел способ перечислить все текущие назначенные группы, чтобы я мог пропустить и удалить их. Надеюсь, это поможет вам, ребята! –

ответ

5

Нашел. Взял 4 часа подряд проб и ошибок, но он работает. Надеюсь, это тоже поможет кому-то другому. Место перед $ OpenWeb.GetFolder ($ path) .Item.Update();

$returnGroups = $OpenWeb.GetFolder($path).Item.RoleAssignments | ` 
     where {` 
     ($_.RoleDefinitionBindings -eq $OpenWeb.RoleDefinitions["Limited Access"]) -and ` 
     ($_.RoleDefinitionBindings -notcontains $OpenWeb.RoleDefinitions["Read"])` 
     }; 
     if ($returnGroups -not $null) 
     { 
     foreach ($item in $returnGroups) 
     { 
      Write-Host "Removing: " $item.Member; 
      $OpenWeb.GetFolder($path).Item.RoleAssignments.Remove($spc[$item.Member]); 
     } 
     } 
Смежные вопросы