From ad1234b84acf7ebfadeb0e29ab577a28bf990b2d 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: Thu, 29 Oct 2026 08:52:27 +0500 Subject: [PATCH] =?UTF-8?q?chore:=20=D1=81=D0=BA=D1=80=D0=B8=D0=BF=D1=82?= =?UTF-8?q?=20=D0=B4=D0=B8=D0=B0=D0=B3=D0=BD=D0=BE=D1=81=D1=82=D0=B8=D0=BA?= =?UTF-8?q?=D0=B8=20=D0=BC=D0=B0=D1=80=D1=88=D1=80=D1=83=D1=82=D0=B0=20?= =?UTF-8?q?=D0=B7=D0=B0=D1=8F=D0=B2=D0=BA=D0=B8=20Inspect-Route.ps1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Только чтение: печатает строки маршрута одной заявки и историю версий строк исполнения — чтобы разбираться, откуда взялся участник и кто перевёл его в «На исполнении». Co-Authored-By: Claude Opus 5.5 (1M context) --- provisioning/Inspect-Route.ps1 | 68 ++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 provisioning/Inspect-Route.ps1 diff --git a/provisioning/Inspect-Route.ps1 b/provisioning/Inspect-Route.ps1 new file mode 100644 index 0000000..b569178 --- /dev/null +++ b/provisioning/Inspect-Route.ps1 @@ -0,0 +1,68 @@ +<# +.SYNOPSIS + Диагностика: печатает строки маршрута одной заявки из списка «— согласование» + (StepOrder, статус, фаза, кем переназначено, кто создал/менял) и историю версий + строк исполнения — чтобы понять, откуда в маршруте взялся участник и кто + перевёл его в «На исполнении». Только чтение, ничего не меняет. + +.EXAMPLE + ./Inspect-Route.ps1 -SiteUrl "https://tnsukz.sharepoint.com/sites/requests" ` + -ClientId "7459c965-5ed4-4673-8140-0ab8faf9db64" -Tenant "tnsukz.onmicrosoft.com" ` + -Thumbprint "224B64C8E0CAB1E09AF373E92B3AF4AC33C1233C" ` + -ListTitle "Прием на работу 1 — согласование" -RequestId 68 +#> +param( + [Parameter(Mandatory = $true)][string]$SiteUrl, + [Parameter(Mandatory = $true)][string]$ClientId, + [Parameter(Mandatory = $true)][string]$Tenant, + [Parameter(Mandatory = $true)][string]$Thumbprint, + [Parameter(Mandatory = $true)][string]$ListTitle, + [Parameter(Mandatory = $true)][int]$RequestId +) + +$ErrorActionPreference = 'Stop' +Connect-PnPOnline -Url $SiteUrl -ClientId $ClientId -Tenant $Tenant -Thumbprint $Thumbprint + +$query = "$RequestId" + + "" +$items = Get-PnPListItem -List $ListTitle -Query $query + +function UserText($value) { + if ($null -eq $value) { return '' } + return $value.Email +} + +Write-Host "`nМаршрут заявки #$RequestId («$ListTitle»):`n" -ForegroundColor Cyan +$items | ForEach-Object { + [pscustomobject]@{ + Id = $_.Id + StepOrder = $_['StepOrder'] + Phase = $_['Phase'] + Status = $_['ApprovalStatus'] + Approver = UserText $_['TansuSiteApprover'] + DelegatedBy = UserText $_['DelegatedBy'] + Reassign = $_['AllowReassignToOtherApprovers'] + Created = $_['Created'] + CreatedBy = UserText $_['Author'] + Modified = $_['Modified'] + ModifiedBy = UserText $_['Editor'] + } +} | Format-Table -AutoSize + +# История версий — только строки исполнения: там видно, кто и когда менял статус. +$items | Where-Object { $_['Phase'] -eq 'Исполнение' } | ForEach-Object { + Write-Host "`nВерсии строки Id=$($_.Id) ($(UserText $_['TansuSiteApprover'])):" -ForegroundColor Yellow + Get-PnPProperty -ClientObject $_ -Property Versions | Out-Null + $_.Versions | ForEach-Object { + Get-PnPProperty -ClientObject $_ -Property CreatedBy | Out-Null + [pscustomobject]@{ + Version = $_.VersionLabel + Created = $_.Created + By = $_.CreatedBy.Email + Status = $_['ApprovalStatus'] + StepOrder = $_['StepOrder'] + } + } | Format-Table -AutoSize +} + +Disconnect-PnPOnline