Mit*_*nik 2 powershell sharepoint
我有一个POSH脚本,用于设置用户对特定文件夹的访问权限,以便读取某些文件.
用户的组被分配到该文件夹(恰好是同一个名称).
然后我创建了一个新视图,将其设置为默认值,并告诉它显示所有没有文件夹的文件.
这个脚本已经工作了4个月,但现在有些人想要使用移动视图,我遇到了一个问题.如果用户没有从根目录到相关文件夹的读取权限,则SharePoints移动视图将不显示该文件夹.
例如,用户具有以下权限集:根文件夹上的受限访问权限Alpha文件夹上的受限访问权限读取Alpha下文件夹的访问权限
我需要这样做才能让用户在移动视图中查看.
这是我的代码:
#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
Run Code Online (Sandbox Code Playgroud)
找到了.试了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]);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14443 次 |
| 最近记录: |