feat: Provision-Lists.ps1 — вход по файлу сертификата .pfx (#1)

Рабочий app-only сертификат для /sites/sed лежит файлом с паролем, а не в
хранилище CurrentUser\My — скрипт умел только по отпечатку.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Тимур Городецкий
2026-10-27 11:26:24 +05:00
parent f9bed709ea
commit b5d7efc749
+17 -2
View File
@@ -34,7 +34,13 @@
Тенант, например tnsukz.onmicrosoft.com Тенант, например tnsukz.onmicrosoft.com
.PARAMETER Thumbprint .PARAMETER Thumbprint
Отпечаток сертификата в хранилище CurrentUser\My. Отпечаток сертификата в хранилище CurrentUser\My. Либо он, либо CertificatePath.
.PARAMETER CertificatePath
Путь к файлу сертификата .pfx — если сертификат не установлен в хранилище.
.PARAMETER CertificatePassword
Пароль к .pfx из CertificatePath.
.PARAMETER ManifestsDir .PARAMETER ManifestsDir
Папка с манифестами. По умолчанию — provisioning/manifests рядом со скриптом. Папка с манифестами. По умолчанию — provisioning/manifests рядом со скриптом.
@@ -60,7 +66,9 @@ param(
[Parameter(Mandatory = $true)][string]$SiteUrl, [Parameter(Mandatory = $true)][string]$SiteUrl,
[Parameter(Mandatory = $true)][string]$ClientId, [Parameter(Mandatory = $true)][string]$ClientId,
[Parameter(Mandatory = $true)][string]$Tenant, [Parameter(Mandatory = $true)][string]$Tenant,
[Parameter(Mandatory = $true)][string]$Thumbprint, [string]$Thumbprint,
[string]$CertificatePath,
[string]$CertificatePassword,
[string]$ManifestsDir = "$PSScriptRoot/manifests", [string]$ManifestsDir = "$PSScriptRoot/manifests",
[string[]]$Only, [string[]]$Only,
[string[]]$Lists [string[]]$Lists
@@ -154,7 +162,14 @@ function Add-ListColumn {
} }
Write-Host "Подключение к $SiteUrl (app-only) ..." -ForegroundColor Cyan Write-Host "Подключение к $SiteUrl (app-only) ..." -ForegroundColor Cyan
if ($Thumbprint) {
Connect-PnPOnline -Url $SiteUrl -ClientId $ClientId -Tenant $Tenant -Thumbprint $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 $files = Get-ChildItem -Path $ManifestsDir -Filter '*.provisioning.json' -ErrorAction SilentlyContinue
if (-not $files) { throw "Манифесты *.provisioning.json не найдены в $ManifestsDir" } if (-not $files) { throw "Манифесты *.provisioning.json не найдены в $ManifestsDir" }