แก้ไข "Get-PnPListItem: การดำเนินการที่พยายามไม่ได้รับอนุญาตเนื่องจากเกินขีดจำกัดมุมมองรายการที่บังคับใช้โดยผู้ดูแลระบบ" ข้อผิดพลาด
ปัญหา: เมื่อพยายามรับรายการจากรายการ SharePoint Online โดยใช้ Get-PnPListItem cmdlet พร้อมพารามิเตอร์แบบสอบถาม ฉันได้รับข้อความแสดงข้อผิดพลาด “Get- PnPListItem : การดำเนินการที่พยายามถูกห้าม เนื่องจากเกินเกณฑ์มุมมองรายการที่บังคับใช้โดยผู้ดูแลระบบ”
สาเหตุที่แท้จริง:
ข้อกำหนดคือการได้รับรายการทั้งหมดที่สร้างขึ้นเมื่อ 90 วันที่ผ่านมา ดังนั้นฉันจึงพยายามดึงข้อมูลรายการโดยใช้ตัวกรองแบบสอบถาม ตามที่ระบุข้อความแสดงข้อผิดพลาด ข้อผิดพลาดนี้เกิดจากรายการขนาดใหญ่ที่มีมากกว่า 5,000 รายการเมื่อคุณสอบถามคอลัมน์ที่ไม่ได้จัดทำดัชนี! นี่คือสคริปต์ PowerShell ที่ทำให้เกิดข้อความแสดงข้อผิดพลาดข้างต้น:
#Parameter
$SiteURL= "https://crescent.sharepoint.com/sites/Projects"
$ListName = "Meetings"
#Connect to PnP Online
Connect-PnPOnline -Url $SiteURL -Interactive
#Define Query to Filter items created 90 days ago
$Query= "<View>
<Query>
<Where>
<Lt>
<FieldRef Name='Created' Type='DateTime'/>
<Value Type='DateTime' IncludeTimeValue='TRUE'>
<Today OffsetDays='-90'/>
</Value>
</Lt>
</Where>
</Query>
</View>"
#Get All Items from the List in batches
$ListItems = Get-PnPListItem -List $ListName -PageSize 500 -Query $Query
Write-host "Total Number of Items Found:"$ListItems.count
#Get Each Item's Created Date
$ListItems | ForEach-Object { Write-host ("List Item:{0} was Created on {1}" -f $_["FileLeafRef"],$_["Created"]) }
วิธีแก้ปัญหา:
ดูเหมือนว่าการใช้สวิตช์ PageSize จะไม่ช่วยเมื่อคุณใช้พารามิเตอร์ "Query" เพื่อรับรายการจากรายการขนาดใหญ่ ดังนั้นฉันจึงได้รายการทั้งหมดก่อน จากนั้นจึงใช้ตัวกรองกับส่วนคำสั่ง "where"
$SiteURL= "https://crescent.sharepoint.com/sites/Projects"
$ListName = "Meetings"
#Connect to PnP Online
Connect-PnPOnline -Url $SiteURL -Interactive
#Get All Items from the List in batches
$ListItems = Get-PnPListItem -List $ListName -PageSize 500
Write-host "Total Number of Items Found:"$ListItems.count
#Filter List Items
$TimeStamp = (Get-Date).AddDays(-90)
$FilteredItems = $ListItems | Where {$_["Created"] -Lt $TimeStamp}
#Get Each Item's Created Date
$FilteredItems | ForEach-Object { Write-host ("List Item:{0} was Created on {1}" -f $_["FileLeafRef"],$_["Created"]) }
ปัญหานี้เกิดขึ้นแล้วใน PnP GitHub และยังคงเปิดอยู่: https://github.com/MicrosoftDocs/office-docs-powershell/issues/3457
เพิ่มคอลัมน์ที่จัดทำดัชนีในรายการและแบบสอบถาม
คุณยังสามารถหลีกเลี่ยงปัญหานี้ได้โดยการเพิ่ม "คอลัมน์ที่จัดทำดัชนี" ลงในรายการ (วิธีเพิ่มคอลัมน์ที่จัดทำดัชนีใน SharePoint Online โดยใช้ PowerShell) และเพิ่มคอลัมน์ที่จัดทำดัชนีลงในแบบสอบถาม เช่น คอลัมน์ ID ได้รับการจัดทำดัชนีตามค่าเริ่มต้น และนี่คือวิธีที่คุณสามารถ
#Parameter
$SiteURL= "https://crescent.sharepoint.com/sites/pmo"
$ListName = "projects"
#Connect to PnP Online
Connect-PnPOnline -Url $SiteURL -Interactive
#Define Query to get list items
$Query= "<View Scope='RecursiveAll'>
<Query>
<OrderBy> <FieldRef Name='ID' Ascending='TRUE' /></OrderBy>
</Query>
<RowLimit>1000</RowLimit>
</View>"
#Get All Items from the List in batches
$ListItems = Get-PnPListItem -List $ListName -Query $Query
Write-host "Total Number of Items Found:"$ListItems.count
แทนที่จะเป็นแอตทริบิวต์ RowLimit คุณสามารถใช้พารามิเตอร์ "PageSize" กับ Get-PnPListItem cmdlet ได้เช่นกัน:
#Define Query to get list items
$Query= "<View Scope='RecursiveAll'>
<Query>
<OrderBy> <FieldRef Name='ID' Ascending='TRUE' /></OrderBy>
</Query>
</View>"
#Get All Items from the List in batches
$ListItems = Get-PnPListItem -List $ListName -Query $Query -PageSize 500
สุดท้าย: คุณอาจได้รับข้อผิดพลาด "พยายามดำเนินการไม่ได้รับอนุญาตเนื่องจากเกินเกณฑ์มุมมองรายการ" เมื่อรายการหรือไลบรารีเอกสารขยายเกิน 5000 รายการใน SharePoint Online หรือ OneDrive ในสถานการณ์ต่างๆ เช่น:
- การใช้สคริปต์ CSOM หรือ PnP PowerShell cmdlets เช่น Add-PnPFile, Copy-PnPFile, Find-PnPFile, Get-PnPFolder, Get-PnPFile, Get-PnPListItem, Executionquery เป็นต้น
- กำลังพยายามทำลายการสืบทอดสิทธิ์ พยายามเปลี่ยนชื่อโฟลเดอร์ ฯลฯ
- การใช้แบบสอบถาม CAML ในสคริปต์ CSOM PowerShell
- เมื่อพยายามลบรายการหรือไซต์
- กำลังพยายามรับรายการโดยใช้ Power Apps ฯลฯ
คุณต้องลดจำนวนรายการในรายการหรือไลบรารีเพื่อแก้ไขปัญหานี้
