From f9bed709eaf99a51c21827d80d5fe4adc9ea6bc6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A2=D0=B8=D0=BC=D1=83=D1=80=20=D0=93=D0=BE=D1=80=D0=BE?= =?UTF-8?q?=D0=B4=D0=B5=D1=86=D0=BA=D0=B8=D0=B9?= Date: Tue, 27 Oct 2026 11:23:58 +0500 Subject: [PATCH] =?UTF-8?q?feat:=20Provision-Lists.ps1=20=E2=80=94=20?= =?UTF-8?q?=D1=84=D0=B8=D0=BB=D1=8C=D1=82=D1=80=20-Lists=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20=D1=82=D0=BE=D1=87=D0=B5=D1=87=D0=BD=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F?= =?UTF-8?q?=20=D1=81=D0=BF=D0=B8=D1=81=D0=BA=D0=BE=D0=B2=20(#1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Полный прогон на рабочем сайте перезаписывает варианты Choice живых списков значениями из манифеста, а манифесты отстали от живых списков (#2). Новые списки «Исключённые предложения» создаём точечно, не трогая остальные. Co-Authored-By: Claude Opus 5.5 (1M context) --- provisioning/Provision-Lists.ps1 | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/provisioning/Provision-Lists.ps1 b/provisioning/Provision-Lists.ps1 index 9c4129a..41f0187 100644 --- a/provisioning/Provision-Lists.ps1 +++ b/provisioning/Provision-Lists.ps1 @@ -42,9 +42,19 @@ .PARAMETER Only Провижионить только манифесты указанных форм (по полю form). По умолчанию — все. +.PARAMETER Lists + Провижионить только списки с указанными названиями. Нужен для добавления нового списка + на рабочий сайт: полный прогон перезаписывает варианты Choice у живых списков + значениями из манифеста, а манифест мог отстать от живого списка. + .EXAMPLE ./Provision-Lists.ps1 -SiteUrl "https://tnsukz.sharepoint.com/sites/sed" ` -ClientId "" -Tenant "tnsukz.onmicrosoft.com" -Thumbprint "" + +.EXAMPLE + ./Provision-Lists.ps1 -SiteUrl "https://tnsukz.sharepoint.com/sites/sed" ` + -ClientId "" -Tenant "tnsukz.onmicrosoft.com" -Thumbprint "" ` + -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