From b5d7efc74910915bf786f404c29f1741e0d895ed 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:26:24 +0500 Subject: [PATCH] =?UTF-8?q?feat:=20Provision-Lists.ps1=20=E2=80=94=20?= =?UTF-8?q?=D0=B2=D1=85=D0=BE=D0=B4=20=D0=BF=D0=BE=20=D1=84=D0=B0=D0=B9?= =?UTF-8?q?=D0=BB=D1=83=20=D1=81=D0=B5=D1=80=D1=82=D0=B8=D1=84=D0=B8=D0=BA?= =?UTF-8?q?=D0=B0=D1=82=D0=B0=20.pfx=20(#1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Рабочий app-only сертификат для /sites/sed лежит файлом с паролем, а не в хранилище CurrentUser\My — скрипт умел только по отпечатку. Co-Authored-By: Claude Opus 5.5 (1M context) --- provisioning/Provision-Lists.ps1 | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/provisioning/Provision-Lists.ps1 b/provisioning/Provision-Lists.ps1 index 41f0187..7411ee9 100644 --- a/provisioning/Provision-Lists.ps1 +++ b/provisioning/Provision-Lists.ps1 @@ -34,7 +34,13 @@ Тенант, например tnsukz.onmicrosoft.com .PARAMETER Thumbprint - Отпечаток сертификата в хранилище CurrentUser\My. + Отпечаток сертификата в хранилище CurrentUser\My. Либо он, либо CertificatePath. + +.PARAMETER CertificatePath + Путь к файлу сертификата .pfx — если сертификат не установлен в хранилище. + +.PARAMETER CertificatePassword + Пароль к .pfx из CertificatePath. .PARAMETER ManifestsDir Папка с манифестами. По умолчанию — provisioning/manifests рядом со скриптом. @@ -60,7 +66,9 @@ param( [Parameter(Mandatory = $true)][string]$SiteUrl, [Parameter(Mandatory = $true)][string]$ClientId, [Parameter(Mandatory = $true)][string]$Tenant, - [Parameter(Mandatory = $true)][string]$Thumbprint, + [string]$Thumbprint, + [string]$CertificatePath, + [string]$CertificatePassword, [string]$ManifestsDir = "$PSScriptRoot/manifests", [string[]]$Only, [string[]]$Lists @@ -154,7 +162,14 @@ function Add-ListColumn { } Write-Host "Подключение к $SiteUrl (app-only) ..." -ForegroundColor Cyan -Connect-PnPOnline -Url $SiteUrl -ClientId $ClientId -Tenant $Tenant -Thumbprint $Thumbprint +if ($Thumbprint) { + Connect-PnPOnline -Url $SiteUrl -ClientId $ClientId -Tenant $Tenant -Thumbprint $Thumbprint +} +elseif ($CertificatePath) { + $securePassword = ConvertTo-SecureString $CertificatePassword -AsPlainText -Force + Connect-PnPOnline -Url $SiteUrl -ClientId $ClientId -Tenant $Tenant -CertificatePath $CertificatePath -CertificatePassword $securePassword +} +else { throw "Укажите -Thumbprint или -CertificatePath" } $files = Get-ChildItem -Path $ManifestsDir -Filter '*.provisioning.json' -ErrorAction SilentlyContinue if (-not $files) { throw "Манифесты *.provisioning.json не найдены в $ManifestsDir" }