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:
@@ -42,9 +42,19 @@
|
|||||||
.PARAMETER Only
|
.PARAMETER Only
|
||||||
Провижионить только манифесты указанных форм (по полю form). По умолчанию — все.
|
Провижионить только манифесты указанных форм (по полю form). По умолчанию — все.
|
||||||
|
|
||||||
|
.PARAMETER Lists
|
||||||
|
Провижионить только списки с указанными названиями. Нужен для добавления нового списка
|
||||||
|
на рабочий сайт: полный прогон перезаписывает варианты Choice у живых списков
|
||||||
|
значениями из манифеста, а манифест мог отстать от живого списка.
|
||||||
|
|
||||||
.EXAMPLE
|
.EXAMPLE
|
||||||
./Provision-Lists.ps1 -SiteUrl "https://tnsukz.sharepoint.com/sites/sed" `
|
./Provision-Lists.ps1 -SiteUrl "https://tnsukz.sharepoint.com/sites/sed" `
|
||||||
-ClientId "<id>" -Tenant "tnsukz.onmicrosoft.com" -Thumbprint "<tp>"
|
-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(
|
param(
|
||||||
[Parameter(Mandatory = $true)][string]$SiteUrl,
|
[Parameter(Mandatory = $true)][string]$SiteUrl,
|
||||||
@@ -52,7 +62,8 @@ param(
|
|||||||
[Parameter(Mandatory = $true)][string]$Tenant,
|
[Parameter(Mandatory = $true)][string]$Tenant,
|
||||||
[Parameter(Mandatory = $true)][string]$Thumbprint,
|
[Parameter(Mandatory = $true)][string]$Thumbprint,
|
||||||
[string]$ManifestsDir = "$PSScriptRoot/manifests",
|
[string]$ManifestsDir = "$PSScriptRoot/manifests",
|
||||||
[string[]]$Only
|
[string[]]$Only,
|
||||||
|
[string[]]$Lists
|
||||||
)
|
)
|
||||||
|
|
||||||
$ErrorActionPreference = 'Stop'
|
$ErrorActionPreference = 'Stop'
|
||||||
@@ -152,9 +163,18 @@ $manifests = @()
|
|||||||
foreach ($file in $files) {
|
foreach ($file in $files) {
|
||||||
$def = Get-Content -Path $file.FullName -Raw -Encoding UTF8 | ConvertFrom-Json
|
$def = Get-Content -Path $file.FullName -Raw -Encoding UTF8 | ConvertFrom-Json
|
||||||
if ($Only -and ($Only -notcontains $def.form)) { continue }
|
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
|
$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: создать все списки/библиотеки ---
|
# --- Проход A: создать все списки/библиотеки ---
|
||||||
Write-Host "`n=== Проход A: списки ===" -ForegroundColor Cyan
|
Write-Host "`n=== Проход A: списки ===" -ForegroundColor Cyan
|
||||||
|
|||||||
Reference in New Issue
Block a user