You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

向SharePoint文件夹添加用户时遇“Collection was of a fixed size”错误求助

解决SharePoint PowerShell脚本中"Collection was of a fixed size"错误

嘿,我来帮你搞定这个困扰你的错误!你遇到的Collection was of a fixed size问题,根源其实是代码里把列表项集合(SPListItemCollection)当成了单个文件夹对象来操作了,咱们一步步拆解问题,再给你修复后的代码。

为啥会报错?

看你这段代码:

$FPfolder = $FPlist.GetItems($query)
foreach($role in $FPfolder.RoleAssignments) {

$FPlist.GetItems($query)返回的是所有匹配查询条件的列表项组成的集合,不是单个文件夹对象!直接对这个集合调用RoleAssignments.Add()肯定会炸——集合本身的权限集合是固定大小的,根本不支持添加操作。

另外还有个小问题:原代码里只创建了权限分配对象,但没给它绑定具体的权限级别(比如只读、编辑),就算没报错,添加的用户也没实际权限,这部分咱们一起补上。

修复后的完整代码

ForEach ($FPfolderId in $FPfolderSplit) {
    $query = New-Object Microsoft.SharePoint.SPQuery
    # 修正了ViewXml的写法(原代码里的@和转义符没必要)
    $query.ViewXml = "<View Scope='RecursiveAll'><Query><Where><Eq><FieldRef Name='Title' /><Value Type='Text'>$FPfolderId</Value></Eq></Where></Query></View>"
    $FPfolderItems = $FPlist.GetItems($query)

    # 先检查有没有找到匹配的文件夹,避免白忙活
    if ($FPfolderItems.Count -eq 0) {
        Write-Warning "没找到对应文件夹: $FPfolderId"
        continue
    }

    # 遍历每个匹配到的文件夹项
    foreach ($folderItem in $FPfolderItems) {
        $userHasPermission = $false
        # 检查当前文件夹是否已经有目标用户的权限
        foreach($role in $folderItem.RoleAssignments) {
            if ($role.Member.Name.Equals($userToAction)) {
                $userHasPermission = $true
                break
            }
        }

        if ($userHasPermission) {
            # 断开权限继承,保留现有权限设置
            $folderItem.BreakRoleInheritance($true)
            $account = $web.EnsureUser("User1")
            $assignment = New-Object Microsoft.SharePoint.SPRoleAssignment($account)
            
            # 给权限分配绑定具体的权限级别,这里用编辑权限做示例,按需替换
            $roleDefinition = $web.RoleDefinitions.GetByType([Microsoft.SharePoint.SPRoleType]::Contributor)
            $assignment.RoleDefinitionBindings.Add($roleDefinition)

            # 给单个文件夹项添加权限
            $folderItem.RoleAssignments.Add($assignment)
            $folderItem.Update()
            Write-Host "成功给文件夹 $($folderItem.Title) 添加User1的权限啦!"
        }
    }
}

关键修复点说明

  • 变量名优化:把$FPfolder改成$FPfolderItems,一眼就能看出这是个集合,避免混淆。
  • 遍历单个项:现在先遍历查询到的每个文件夹列表项,再对单个项操作权限,就不会触发固定集合的错误了。
  • 补全权限级别:新增了绑定权限级别的代码,确保添加的用户拥有实际的访问权限。
  • 空集合检查:加了判断如果没找到对应文件夹就跳过,避免无效操作。

内容的提问来源于stack exchange,提问作者gymcode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:59:53