feat: Provision-Lists.ps1 — фильтр -Lists для точечного добавления списков (#1)

Полный прогон на рабочем сайте перезаписывает варианты Choice живых списков
значениями из манифеста, а манифесты отстали от живых списков (#2). Новые
списки «Исключённые предложения» создаём точечно, не трогая остальные.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Тимур Городецкий
2026-10-27 11:23:58 +05:00
parent 26b937afba
commit f9bed709ea
+22 -2
View File
@@ -42,9 +42,19 @@
.PARAMETER Only
Провижионить только манифесты указанных форм (по полю form). По умолчанию — все.
.PARAMETER Lists
Провижионить только списки с указанными названиями. Нужен для добавления нового списка
на рабочий сайт: полный прогон перезаписывает варианты Choice у живых списков
значениями из манифеста, а манифест мог отстать от живого списка.
.EXAMPLE
./Provision-Lists.ps1 -SiteUrl "https://tnsukz.sharepoint.com/sites/sed" `
-ClientId "<id>" -Tenant "tnsukz.onmicrosoft.com" -Thumbprint "<tp>"
.EXAMPLE
./Provision-Lists.ps1 -SiteUrl "https://tnsukz.sharepoint.com/sites/sed" `
-ClientId "<id>" -Tenant "tnsukz.onmicrosoft.com" -Thumbprint "<tp>" `
-Lists "Исключённые предложения", "Исключённые предложения ОИД"
#>
param(
[Parameter(Mandatory = $true)][string]$SiteUrl,
@@ -52,7 +62,8 @@ param(
[Parameter(Mandatory = $true)][string]$Tenant,
[Parameter(Mandatory = $true)][string]$Thumbprint,
[string]$ManifestsDir = "$PSScriptRoot/manifests",
[string[]]$Only
[string[]]$Only,
[string[]]$Lists
)
$ErrorActionPreference = 'Stop'
@@ -152,9 +163,18 @@ $manifests = @()
foreach ($file in $files) {
$def = Get-Content -Path $file.FullName -Raw -Encoding UTF8 | ConvertFrom-Json
if ($Only -and ($Only -notcontains $def.form)) { continue }
if ($Lists) {
$def.lists = @($def.lists | Where-Object { $Lists -contains $_.title })
if ($def.lists.Count -eq 0) { continue }
}
$manifests += $def
}
if (-not $manifests) { throw "Нет манифестов после фильтра -Only" }
if (-not $manifests) { throw "Нет манифестов после фильтров -Only / -Lists" }
if ($Lists) {
$found = @($manifests | ForEach-Object { $_.lists } | ForEach-Object { $_.title })
$missing = @($Lists | Where-Object { $found -notcontains $_ })
if ($missing.Count -gt 0) { throw "Списков нет в манифестах: $($missing -join ', ')" }
}
# --- Проход A: создать все списки/библиотеки ---
Write-Host "`n=== Проход A: списки ===" -ForegroundColor Cyan