ค้นหาเว็บไซต์

แก้ไข "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 ได้รับการจัดทำดัชนีตามค่าเริ่มต้น และนี่คือวิธีที่คุณสามารถ ระบุแอตทริบิวต์ด้วยแบบสอบถาม CAML:


#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 ฯลฯ

คุณต้องลดจำนวนรายการในรายการหรือไลบรารีเพื่อแก้ไขปัญหานี้

บทความที่เกี่ยวข้อง