Copiați și lipiți acest script eșantion și modificați după cum este necesar pentru mediul dvs.:
<# . SINOPSIS Afișează starea curentă a orchestratorului de implementare secure boot.
.DESCRIPTION Oferă vizibilitate în timp real în progresul lansării: - Numărul curent de undă și dispozitivele direcționate - Dispozitive actualizate versus în așteptare - Bucketuri blocate care necesită atenție - Jurnal de activitate recent - Link tablou de bord Rulați oricând acest lucru pentru a vedea cum progresează implementarea.
.PARAMETER ReportBasePath Calea către raportul/directorul de stare utilizat de orchestrator
.PARAMETER ShowLog Afișare intrări jurnal recente (ultimele 50 de linii)
.PARAMETER ShowBlocked Afișați detalii despre bucketurile blocate
.PARAMETER ShowWaves Afișați istoricul valurilor cu numărul de dispozitive
.PARAMETER Watch Reîmprospătați continuu starea la fiecare N secunde
.PARAMETER OpenDashboard Deschideți cel mai recent tablou de bord HTML în browser
.EXAMPLE .\Get-SecureBootRolloutStatus.ps1 -ReportBasePath "C:\SecureBootReports"
.EXAMPLE .\Get-SecureBootRolloutStatus.ps1 -ReportBasePath "C:\SecureBootReports" -Watch 30
.EXAMPLE .\Get-SecureBootRolloutStatus.ps1 -ReportBasePath "C:\SecureBootReports" -OpenDashboard #>
[CmdletBinding()] param( [Parametru(Obligatoriu = $true)] [șir]$ReportBasePath, [Parametru(Obligatoriu = $false)] [comutator]$ShowLog, [Parametru(Obligatoriu = $false)] [comutator]$ShowBlocked, [Parametru(Obligatoriu = $false)] [comutator]$ShowWaves, [Parametru(Obligatoriu = $false)] [int]$Watch = 0, [Parametru(Obligatoriu = $false)] [comutator]$OpenDashboard )
$ErrorActionPreference = "Stop" $DownloadUrl = "https://aka.ms/getsecureboot" $DownloadSubPage = "Eșantioane de implementare și monitorizare"
# Note: This script has no dependencies on other scripts. # Pentru set de instrumente complet, descărcați de la: $DownloadUrl -> $DownloadSubPage
# ============================================================================ # FUNCȚII AJUTOR # ============================================================================
function ConvertTo-Hashtable { param([Parameter(ValueFromPipeline = $true)]$InputObject) proces { dacă ($null -eq $InputObject) { returnează @{} } dacă ($InputObject -este [System.Collections.IDictionary]) { returnează $InputObject } dacă ($InputObject -este [PSCustomObject]) { $hash = @{} foreach ($prop în $InputObject.PSObject.Properties) { $hash[$prop. Nume] = ConvertTo-Hashtable $prop. Valoarea } $hash de returnare } dacă ($InputObject -este [System.Collections.IEnumerable] -and $InputObject -isnot [șir]) { returnează @($InputObject | ForEach-Object { ConvertTo-Hashtable $_ }) } $InputObject de returnare } }
function Show-Status { $stateDir = Join-Path $ReportBasePath "RolloutState" $rolloutStatePath = Join-Path $stateDir "RolloutState.json" $blockedBucketsPath = Join-Path $stateDir "BlockedBuckets.json" Golire gazdă Write-Host "" Write-Host ("=" * 80) -Prim-planColor Cyan Write-Host " SECURE BOOT ROLLOUT STATUS" -ForegroundColor Cyan Write-Host " $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')" -Prim-planColor gri Write-Host ("=" * 80) -Prim-planColor Cyan Write-Host "" # Verificați dacă rulează activitatea orchestratorului $task = Get-ScheduledTask -TaskName "SecureBoot-Rollout-Orchestrator" -ErrorAction SilentlyContinue dacă ($task) { $taskState = $task. Stat $color = dacă ($taskState -eq "Rulează") { "Verde" } elseif ($taskState -eq "Gata") { "Galben" } altceva { "Roșu" } Write-Host "Activitate planificată: " -NoNewline $color culoare Write-Host $taskState -prim plan } altfel, { Write-Host "Activitate planificată: " -NoNewline Write-Host "Neinstalat" - Gri culoare prim plan } # Starea de încărcare a lansării dacă (-nu (Test-Cale $rolloutStatePath)) { Write-Host "" Write-Host "Nu s-a găsit nicio stare de implementare. Este posibil ca Orchestratorul să nu fi început încă." -Prim-planColor galben Write-Host "Cale stare: $rolloutStatePath" - Gri gri prim plan Reveni } $state = Get-Content $rolloutStatePath -Brut | ConvertFrom-Json | ConvertTo-Hashtable Write-Host "" Write-Host "PROGRES IMPLEMENTARE" - Culoare prim plan galben Write-Host ("-" * 40) $status = $state. Starea $statusColor = comutator ($status) { "Finalizat" { "Verde" } "InProgress" { "Cyan" } "NotStarted" { "Gri" } { "Alb" } implicit } Write-Host "Stare: " -NoNewline $statusColor culoare Write-Host $status -prim plan Write-Host "Val curent: $($state. CurrentWave)" Write-Host "Total audiență specifică: $($state. TotalDevicesTargeted)" Write-Host "Total actualizat: $($state. TotalDevicesUpdated)" dacă ($state. StartedAt) { Write-Host "Început: $($state. StartedAt)" } dacă ($state. Ultima agregare) { Write-Host "Ultimul cec: $($state. LastAggregation)" } dacă ($state. CompletedAt) { Write-Host "Terminat: $($state. CompletedAt)" -Prim planColor Verde } # Afișați bara de progres dacă ($state. TotalDevicesTargeted -gt 0) { $pct = dacă ($state. TotalDevicesUpdated -și $state. TotalDevicesTargeted) { [matematică]::Round(($state. TotalDevicesUpdated /$state. TotalDevicesTargeted) * 100, 1) } altfel{ 0 } Write-Host "" Write-Host "Progres: " -NoNewline $barWidth = 40 $filled = [matematică]::Floor($barWidth * $pct / 100) Write-Host "[" -NoNewline Write-Host ("█" * $filled) -Prim-planColor verde -NoNewline Write-Host ("░" * ($barWidth - $filled)) -Prim planColor DarkGray -NoNewline Write-Host "] $pct%" } # Rezumat bucketuri blocate if (Test-Cale $blockedBucketsPath) { $blocked = Get-Content $blockedBucketsPath -Brut | ConvertFrom-Json | ConvertTo-Hashtable dacă ($blocked. Count -gt 0) { Write-Host "" Write-Host "BUCKETURI BLOCATE: " -NoNewline -Culoare prim plan roșu Write-Host "$($blocked. Contoare) bucketuri necesită atenție" -Prim planColor Roșu dacă ($ShowBlocked) { Write-Host "" pentru a căuta ($key în $blocked. Chei) { $info = $blocked[$key] Write-Host " ► $key" - Roșu prim plan Write-Host " Motiv: $($info. Motiv)" -Prim-planColor gri Write-Host " Dispozitiv: $($info. FailedDevice)" -Prim-planColor gri Write-Host " De la: $($info. BlockedAt)" -Prim-planColor gri } } altfel, { Write-Host " Rulare cu -ShowBlocked pentru detalii" -Prim-planColor gri } } } # Istoric val dacă ($ShowWaves și $state. WaveHistory -și $state. WaveHistory.Count -gt 0) { Write-Host "" Write-Host "ISTORICUL VALURILOR" -Prim planColor galben Write-Host ("-" * 40) pentru a căuta ($wave în $state. WaveHistory) { Write-Host "Wave $($wave. WaveNumber): " -NoNewline -Prim-planColor Cyan Write-Host "$($wave. Dispozitive DeviceCount" -NoNewline Write-Host " - $($wave. StartedAt)" -Prim-planColor gri } } # Cel mai recent tablou de bord $latestAggregation = Get-ChildItem -Cale $ReportBasePath -Director -Filtru "Aggregation_*" -ErrorAction SilentlyContinue | nume Sort-Object -Descendent | Select-Object -Primul 1 dacă ($latestAggregation) { $dashboard = Get-ChildItem -Cale $latestAggregation.FullName -Filtru "*Tablou de bord*.html" -ErrorAction SilentlyContinue | Select-Object -Primul 1 dacă ($dashboard) { Write-Host "" Write-Host "CEL MAI RECENT TABLOU DE BORD" - Culoare prim plan galben Write-Host $dashboard. FullName -Prim-planColor gri dacă ($OpenDashboard) { Start-Process $dashboard. Nume Complet } } } # Jurnal recent dacă ($ShowLog) { $logFile = Get-ChildItem -Cale $stateDir -Filtru "Orchestrator_*.log" -ErrorAction SilentlyContinue | Sort-Object nume -Descendent | Select-Object -Primul 1 dacă ($logFile) { Write-Host "" Write-Host "JURNAL RECENT" -Prim-planColor galben Write-Host ("-" * 40) Get-Content $logFile.FullName -Coada 20 | ForEach-Object { if ($_ -match '\[ERROR\]') { Write-Host $_ -Culoare prim plan roșu } elseif ($_ -match '\[WARN\]') { Write-Host $_ -Culoare prim plan galbenă } elseif ($_ -match '\[OK\]') { Write-Host $_ - Culoare prim plan } elseif ($_ -match '\[WAVE\]') { Write-Host $_ -Prim-planColor Cyan } altfel, { Write-Host $_ - Culoare gri prim plan } } } } Write-Host "" Write-Host ("-" * 80) -Prim-planColor Gri închis dacă (-nu $ShowLog -sau -not $ShowWaves -or -not $ShowBlocked) { Write-Host "Opțiuni: -ShowLog | -ShowWaves | -Afișareblocat | -OpenDashboard | -Watch 30" -Prim-planColor DarkGray } }
# ============================================================================ NR. PRINCIPAL # ============================================================================
if (-not (Test-Path $ReportBasePath)) { Write-Host "Calea raportului nu s-a găsit: $ReportBasePath" -Culoare prim plan roșu ieșire 1 }
if ($Watch -gt 0) { Write-Host "Se urmărește starea la fiecare $Watch secunde. Apăsați Ctrl+C pentru a opri". -Prim-planColor Cyan în timp ce ($true) { Afișare stare $Watch Start-Sleep -secunde } } altfel, { Afișare stare }