使用powershell将权限/共享子文件夹设置为库中的组

使用powershell将权限/共享子文件夹设置为库中的组,powershell,sharepoint,sharepoint-2013,Powershell,Sharepoint,Sharepoint 2013,我正在使用SP 2013 我必须为文档库中的子文件夹设置特定权限 我有以下脚本: Add-PSSnapin Microsoft.SharePoint.PowerShell Function GetFiles($folder) { # Use recursion to loop through all subfolders. foreach ($subFolder in $folder.SubFolders) { GetFiles($subFolder)

我正在使用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.roleasignments.Add($roleasignment)

不能对空值表达式调用方法。第29行字符:13+$folder.roleasignments.Add($roleasignment)+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~类别信息:无效操作:(:)[,RuntimeException+FullyQualifiederRoid:InvokeMethodFull

所有文件夹都会发生这种情况

我尝试了同样的代码来设置整个库的权限,结果成功了。但它不适用于文件夹


请帮帮我。谢谢

在分配新权限之前,您需要中断对子文件夹的继承

$folder.BreakRoleInheritance(“true”)

请参阅下面的脚本,它执行类似的操作。从

我已更正了格式,并将整个内容粘贴到此处,以便更好地阅读:

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()

你好对于可以使用的文件夹:Set Acl:错误表明它没有任何值。请检查
$roleasignment
$folder.roleasignments