不知道如何谷歌这样,但有没有办法查询所有项目
答案 0 :(得分:1)
您必须遍历这些项目并检查每个项目的权限项目,并在相关时更新它们。您拥有的物品越多,所需的时间就越长。所以不是一个很好的解决方案。
另一种解决方案是使用仅为x组成员的用户凭据。 SharePoint会自动将权限考虑在内。因此,如果使用该用户连接到列表,则应该只获取用户具有权限的项目。 使用NetworkCredentials类执行此操作。
然后使用CAML查询更新您的项目。
- 含
答案 1 :(得分:1)
旧帖子,但仍然获得了很多见解,我找不到其他与此相关的地方。现在有一些快捷方式,您可以使用CAML仅返回具有唯一权限的项目,而不必使用HasUniqueRoleAssignments属性。
共享/设置列表项的唯一权限会将隐藏的“字段”节点(“ SharedWithDetails”和“ SharedWithUsers”)添加到其SchemaXml属性,您可以使用CAML对其进行过滤:
<View><Query><Where><IsNotNull><FieldRef Name='SharedWithDetails' /></IsNotNull></Where></Query></View>
顺便说一句,在Item上设置唯一许可似乎还会在列表本身上添加一个标志,这大概是/_layouts/15/uniqperm.aspx页如何如此迅速地在biiiig网站上返回答案的方式(并且是隐含的)含糊不清的“可能包含具有唯一权限的项目的列表”消息)。您使用此额外的XML来标识(可能)包含具有唯一权限的项目的列表,这比枚举列表中的每个项目来找出 if 中的任何一项要有效的多[em] 他们有独特的权限。如果您的网站包含许多列表或任何大列表,这特别有价值。
此PnP PowerShell代码返回(可能)具有具有唯一权限的项目的所有列表:
Get-PnPList -Includes SchemaXml | ? {$_.SchemaXML -match "SharedWithDetails"}
有了列表后,就可以使用Get-PnPListItem和上面的CAML查询有效地返回仅具有唯一权限的项目,而无需枚举/加载列表中的每个项目: / p>
Get-PnPListItem -List [YourList] -Query "<View><Query><Where><IsNotNull><FieldRef Name='SharedWithDetails' /></IsNotNull></Where></Query></View>"
答案 2 :(得分:0)
我认为你不能通过塑造CAML查询并使用SPQuery对象以这种方式获取项目来做到这一点。
我的想法是获取所有项目,并循环测试HasUniqueRoleAssignments和RoleAssignments属性。