Старый пост, но все еще получаю много просмотров, и я не могу найти более подходящего, чтобы сказать это.Сейчас доступно несколько ярлыков, и вы можете использовать CAML для возврата только элементов с уникальными разрешениями, просто не используя свойство HasUniqueRoleAssignments.
Совместное использование / установка уникальных разрешений для элемента списка добавляет скрытые«Полевые» узлы («SharedWithDetails» и «SharedWithUsers») для его свойства SchemaXml, которое можно фильтровать с помощью CAML:
<View><Query><Where><IsNotNull><FieldRef Name='SharedWithDetails' /></IsNotNull></Where></Query></View>
Кстати, установка уникального разрешения для элемента также, кажется, добавляет флаг ксам список, что, по-видимому, позволяет странице /_layouts/15/uniqperm.aspx так быстро возвращать ответы на biiiig сайтах (и загадочно расплывчатое сообщение «Списки, которые могут содержать элементы с уникальными разрешениями»).Этот дополнительный XML-код используется для идентификации списков, которые (возможно) содержат элементы с уникальными разрешениями, что на значительно более эффективно, чем перечисление каждого элемента в списке, чтобы выяснить , если любой из них имелуникальные разрешения.Это особенно ценно, если ваш сайт содержит много списков или большие списки.
Этот код PnP PowerShell возвращает все списки, которые (возможно) имеют элементы с уникальными разрешениями:
Get-PnPList -Includes SchemaXml | ? {$_.SchemaXML -match "SharedWithDetails"}
И один разу вас есть список, вы можете использовать Get-PnPListItem и вышеуказанный CAML-запрос, чтобы эффективно возвращать только элементы с уникальными разрешениями без необходимости перечислять / загружать каждый элемент в списке:
Get-PnPListItem -List [YourList] -Query "<View><Query><Where><IsNotNull><FieldRef Name='SharedWithDetails' /></IsNotNull></Where></Query></View>"