b12fcd0939
Только чтение: по каждому списку «… — согласование» показывает число строк и проиндексированы ли Ticket, ApprovalStatus и TansuSiteApprover — без индекса фильтр по колонке в списке больше 5000 строк падает. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
55 lines
2.6 KiB
PowerShell
55 lines
2.6 KiB
PowerShell
<#
|
||
.SYNOPSIS
|
||
Диагностика: для каждого списка «… — согласование» на сайте печатает число
|
||
строк и проиндексированы ли колонки, по которым портал фильтрует маршрут.
|
||
Только чтение, ничего не меняет.
|
||
|
||
.DESCRIPTION
|
||
Портал ищет шаги маршрута фильтрами по Ticket (TicketId eq …), ApprovalStatus
|
||
и TansuSiteApprover. В списке больше 5000 строк такой фильтр работает только
|
||
по проиндексированной колонке — иначе SharePoint отвечает ошибкой порога
|
||
представления. Скрипт показывает, где индекса нет и как близко список к 5000.
|
||
|
||
.EXAMPLE
|
||
./Inspect-Indexes.ps1 -SiteUrl "https://tnsukz.sharepoint.com/sites/requests" `
|
||
-ClientId "7459c965-5ed4-4673-8140-0ab8faf9db64" -Tenant "tnsukz.onmicrosoft.com" `
|
||
-Thumbprint "224B64C8E0CAB1E09AF373E92B3AF4AC33C1233C"
|
||
#>
|
||
param(
|
||
[Parameter(Mandatory = $true)][string]$SiteUrl,
|
||
[Parameter(Mandatory = $true)][string]$ClientId,
|
||
[Parameter(Mandatory = $true)][string]$Tenant,
|
||
[Parameter(Mandatory = $true)][string]$Thumbprint
|
||
)
|
||
|
||
$ErrorActionPreference = 'Stop'
|
||
|
||
# Колонки списков согласования, по которым портал фильтрует (см.
|
||
# shared/approval/approvalList.service.ts и features/myRequests/myRequests.service.ts).
|
||
$filteredColumns = @('Ticket', 'ApprovalStatus', 'TansuSiteApprover')
|
||
|
||
# Порог представления SharePoint: выше него фильтр по неиндексированной колонке падает.
|
||
$listViewThreshold = 5000
|
||
|
||
Connect-PnPOnline -Url $SiteUrl -ClientId $ClientId -Tenant $Tenant -Thumbprint $Thumbprint
|
||
|
||
$approvalLists = Get-PnPList | Where-Object { $_.Title -like '*— согласование' } | Sort-Object Title
|
||
|
||
$report = foreach ($list in $approvalLists) {
|
||
$row = [ordered]@{
|
||
'Список' = $list.Title
|
||
'Строк' = $list.ItemCount
|
||
'До 5000' = $listViewThreshold - $list.ItemCount
|
||
}
|
||
foreach ($name in $filteredColumns) {
|
||
$field = Get-PnPField -List $list -Identity $name -ErrorAction SilentlyContinue
|
||
$row[$name] = if (-not $field) { 'нет колонки' } elseif ($field.Indexed) { 'индекс' } else { 'НЕТ индекса' }
|
||
}
|
||
[pscustomobject]$row
|
||
}
|
||
|
||
Write-Host "`nИндексы в списках согласования ($SiteUrl):`n" -ForegroundColor Cyan
|
||
$report | Format-Table -AutoSize
|
||
|
||
Disconnect-PnPOnline
|