我正在使用SP 2013。
我必须为文档库中的子文件夹设置特定权限
我有以下脚本:
Add-PSSnapin Microsoft.SharePoint.PowerShell
Function GetFiles($folder)
{
# Use recursion to loop through all subfolders.
foreach ($subFolder in $folder.SubFolders)
{
GetFiles($subFolder)
}
if($folder.Name -eq "C" -Or $folder.Name -eq "B3-B6" -Or $folder.Name -eq "C8" -Or $folder.Name -eq "D" -Or $folder.Name -eq "A5" -Or $folder.Name -eq "A1-A4")
{
Write-Host "+"$folder.Name
if($folder.Name -eq "C8")
{
$roleAssignment = new-object Microsoft.SharePoint.SPRoleAssignment($web.SiteGroups["HumanResources-HR - C8"])
}
else
{
$roleAssignment = new-object Microsoft.SharePoint.SPRoleAssignment($web.SiteGroups["HumanResources-HR - Other"])
}
#Get Permission Level, such as "Read", "Contribute", etc
$roleAssignment.RoleDefinitionBindings.Add($web.RoleDefinitions["Contribute"])
$roleAssignment.RoleDefinitionBindings.Add($web.RoleDefinitions["Read"])
#Grant Access to specified Group
$folder.RoleAssignments.Add($roleAssignment)
#To Remove Access: Call $item.RoleAssignments.Remove($group) . No Need for objects: roleAssignment, roleDefinition
$folder.Update();
Write-Host "Successfully added $($PermissionLevel) to $GroupName group in $($folder.Name)" -foregroundcolor Green
}
}
$web = Get-SPWeb -Identity "xxx.xxx.xxx/sites/xxx"
$rfolder=$web.Lists["DOKUMENTNA KNJIŽNICA"].RootFolder
GetFiles($rfolder)
我收到错误:$ folder.RoleAssignments.Add($ roleAssignment)
您无法在空值表达式上调用方法。在行:29 char:13 + $ folder.RoleAssignments.Add($ roleAssignment)+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~ + CategoryInfo:InvalidOperation:(:) [],RuntimeException + FullyQualifiedErrorId:InvokeMethodOnNull
所有文件夹都会发生这种情况。
我尝试使用相同的代码来设置整个库的权限,并且它有效。但它不适用于文件夹。
请帮助我。谢谢
答案 0 :(得分:0)
在分配新权限之前,您需要在子文件夹上中断继承。
$folder.BreakRoleInheritance("true")
请参阅下面的脚本,它做了类似的事情。来自this link
我已经更正了格式并在此处粘贴了整个内容以便更好地阅读:
Add-PSSnapin Microsoft.SharePoint.PowerShell -erroraction SilentlyContinue
$site = new-object Microsoft.SharePoint.SPSite("http://myserver/")
$web = $site.OpenWeb()
function GrantGroupPermission($groupName)
{
[Microsoft.SharePoint.SPGroupCollection]$spgroups = $web.SiteGroups
[Microsoft.SharePoint.SPGroup]$spgroup = $groups[$groupName]
$sproleass=new-object Microsoft.SharePoint.SPRoleAssignment([Microsoft.SharePoint.SPPrincipal]$spgroup)
$folder.BreakRoleInheritance("true")
$sproleass.RoleDefinitionBindings.Add($web.RoleDefinitions["Contribute"])
$folder.RoleAssignments.Add($sproleass);
Write-Host "Permission provided for group ", $groupName
}
function GrantUserpermission($userName)
{
[Microsoft.SharePoint.SPUserCollection]$spusers=[Microsoft.SharePoint.SPUserCollection]$web.SiteUsers
[Microsoft.SharePoint.SPUser]$spuser=$spusers[$userName]
$sproleass=new-object Microsoft.SharePoint.SPRoleAssignment([Microsoft.SharePoint.SPPrincipal]$spuser)
$folder.BreakRoleInheritance("true")
$sproleass.RoleDefinitionBindings.Add($web.RoleDefinitions["Contribute"])
$folder.RoleAssignments.Add($sproleass);
Write-Host "Permission provided for user ", $userName
}
$doclib=[Microsoft.SharePoint.SPDocumentLibrary]$web.Lists["Shared Documents"]
$foldercoll=$doclib.Folders;
foreach($folder in $foldercoll)
{
Write-Host $folder.Name
if($folder.Name.Equals("f2"))
{
GrantUserPermission("raj")
}
}
Write-Host "Completed...."
$web.Close()
$site.Dispose()