Kopieer en plak dit voorbeeldscript en wijzig deze indien nodig voor uw omgeving:
<# . SYNOPSIS Toont de huidige status van de orchestrator voor de secure boot-implementatie.
.DESCRIPTION Biedt realtime inzicht in de voortgang van de implementatie: - Huidige golfnummer en apparaten gericht - Apparaten bijgewerkt versus in behandeling - Geblokkeerde buckets die aandacht vereisen - Recent activiteitenlogboek - Dashboardkoppeling Voer dit op elk gewenst moment uit om te zien hoe de implementatie vordert.
.PARAMETER ReportBasePath Pad naar de rapport-/statusmap die wordt gebruikt door de orchestrator
.PARAMETER ShowLog Recente logboekvermeldingen weergeven (laatste 50 regels)
.PARAMETER ShowBlocked Details van geblokkeerde buckets weergeven
.PARAMETER ShowWaves Golfgeschiedenis weergeven met apparaataantallen
.PARAMETER Watch Status continu elke N seconden vernieuwen
.PARAMETER OpenDashboard Het meest recente HTML-dashboard openen in de 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( [Parameter(Verplicht = $true)] [tekenreeks]$ReportBasePath, [Parameter(Verplicht = $false)] [switch]$ShowLog, [Parameter(Verplicht = $false)] [switch]$ShowBlocked, [Parameter(Verplicht = $false)] [switch]$ShowWaves, [Parameter(Verplicht = $false)] [int]$Watch = 0, [Parameter(Verplicht = $false)] [switch]$OpenDashboard )
$ErrorActionPreference = "Stop" $DownloadUrl = "https://aka.ms/getsecureboot" $DownloadSubPage = "Implementatie- en bewakingsvoorbeelden"
# Note: This script has no dependencies on other scripts. # Download voor de volledige toolset van: $DownloadUrl -> $DownloadSubPage
# ============================================================================ # HELPER-FUNCTIES # ============================================================================
function ConvertTo-Hashtable { param([Parameter(ValueFromPipeline = $true)]$InputObject) proces { if ($null -eq $InputObject) { return @{} } if ($InputObject -is [System.Collections.IDictionary]) { return $InputObject } if ($InputObject -is [PSCustomObject]) { $hash = @{} foreach ($prop in $InputObject.PSObject.Properties) { $hash[$prop. Naam] = ConvertTo-Hashtable $prop. Waarde } $hash retourneren } if ($InputObject -is [System.Collections.IEnumerable] -and $InputObject -isnot [string]) { retourneer @($InputObject | ForEach-Object { ConvertTo-Hashtable $_ }) } $InputObject retourneren } }
function Show-Status { $stateDir = Join-Path $ReportBasePath "RolloutState" $rolloutStatePath = Join-Path $stateDir 'RolloutState.json' $blockedBucketsPath = Join-Path $stateDir 'BlockedBuckets.json' Clear-Host Write-Host "" Write-Host ("=" * 80) -ForegroundColor Cyan Write-Host STATUS VAN SECURE BOOT ROLLOUT -ForegroundColor Cyan Write-Host " $(Get-Date -Format 'jjjj-MM-dd UU:mm:ss')" -ForegroundColor Gray Write-Host ("=" * 80) -ForegroundColor Cyan Write-Host "" # Controleer of de orchestratortaak wordt uitgevoerd $task = Get-ScheduledTask -TaskName "SecureBoot-Rollout-Orchestrator" -ErrorAction SilentlyContinue if ($task) { $taskState = $task. Staat $color = if ($taskState -eq "Running") { "Green" } elseif ($taskState -eq "Ready") { "Yellow" } else { "Red" } Write-Host "Geplande taak: " -GeenNieuwe regel Write-Host $taskState -ForegroundColor $color } else { Write-Host "Geplande taak: " -GeenNieuwe regel Write-Host 'Niet geïnstalleerd' -ForegroundColor Gray } # Implementatiestatus laden if (-not (testpad $rolloutStatePath)) { Write-Host "" Write-Host 'Geen implementatiestatus gevonden. Orchestrator is mogelijk nog niet gestart." -ForegroundColor Yellow Write-Host 'State path: $rolloutStatePath' -ForegroundColor Gray Terug } $state = Get-Content $rolloutStatePath -Raw | ConvertFrom-Json | ConvertTo-Hashtable Write-Host "" Write-Host "VOORTGANG VAN IMPLEMENTATIE" -VoorgrondKleur Geel Write-Host ("-" * 40) $status = $state. Status $statusColor = schakelaar ($status) { "Voltooid" { "Groen" } "InProgress" { "Cyaan" } "NotStarted" { "Gray" } standaard { "Wit" } } Write-Host "Status: " -NoNewline Write-Host $status -ForegroundColor $statusColor Write-Host Huidige golf: $($state. CurrentWave)" Write-Host "Totaal gericht: $($state. TotalDevicesTargeted)" Write-Host 'Totaal bijgewerkt: $($state. TotalDevicesUpdated)" if ($state. StartedAt) { Write-Host 'Gestart: $($state. StartedAt)" } if ($state. LastAggregation) { Write-Host 'Laatste cheque: $($state. LastAggregation)" } if ($state. CompletedAt) { Write-Host voltooid: $($state. CompletedAt)" -ForegroundColor Green } # Voortgangsbalk weergeven if ($state. TotalDevicesTargeted -gt 0) { $pct = if ($state. TotalDevicesUpdated -en $state. TotalDevicesTargeted) { [wiskunde]::Round(($state. TotalDevicesUpdated/$state. TotalDevicesTargeted) * 100, 1) } anders { 0 } Write-Host "" Write-Host "Voortgang: " -NoNewline $barWidth = 40 $filled = [wiskunde]::Floor($barWidth * $pct / 100) Write-Host "[" -NoNewline Write-Host ("█" * $filled) -ForegroundColor Green -NoNewline Write-Host ("░" * ($barWidth - $filled)) -ForegroundColor DarkGray -NoNewline Write-Host "] $pct%" } Overzicht van # Geblokkeerde buckets if (testpad $blockedBucketsPath) { $blocked = Get-Content $blockedBucketsPath -Raw | ConvertFrom-Json | ConvertTo-Hashtable if ($blocked. Aantal -gt 0) { Write-Host "" Write-Host "BLOCKED BUCKETS: " -NoNewline -ForegroundColor Red Write-Host $($blocked. Aantal) buckets hebben aandacht nodig" -ForegroundColor Red if ($ShowBlocked) { Write-Host "" foreach ($key in $blocked. Sleutels) { $info = $blocked[$key] Write-Host " ► $key" -VoorgrondKleur Rood Write-Host " Reden: $($info. Reden)" -VoorgrondKleur Grijs Write-Host " Apparaat: $($info. FailedDevice)" -ForegroundColor Gray Write-Host " Sinds: $($info. BlockedAt)" -ForegroundColor Gray } } else { Write-Host 'Uitvoeren met -ShowBlocked voor details' -ForegroundColor Gray } } } # Golfgeschiedenis if ($ShowWaves -en $state. WaveHistory -en $state. WaveHistory.Count -gt 0) { Write-Host "" Write-Host "WAVE HISTORY" -ForegroundColor Yellow Write-Host ("-" * 40) foreach ($wave in $state. WaveHistory) { Write-Host "Wave $($wave. WaveNumber): " -NoNewline -ForegroundColor Cyan Write-Host $($wave. DeviceCount) apparaten" -NoNewline Write-Host " - $($wave. StartedAt)" -ForegroundColor Gray } } # Meest recente dashboard $latestAggregation = Get-ChildItem -Path $ReportBasePath -Directory -Filter "Aggregation_*" -ErrorAction SilentlyContinue | Sort-Object naam - aflopend | Select-Object -Eerste 1 if ($latestAggregation) { $dashboard = Get-ChildItem -Path $latestAggregation.FullName -Filter "*Dashboard*.html" -ErrorAction SilentlyContinue | Select-Object - Eerste 1 if ($dashboard) { Write-Host "" Write-Host 'LAATSTE DASHBOARD' -VoorgrondKleur Geel Write-Host $dashboard. FullName -ForegroundColor Gray if ($OpenDashboard) { Start-Process $dashboard. Fullname } } } # Recent logboek if ($ShowLog) { $logFile = Get-ChildItem -Path $stateDir -Filter "Orchestrator_*.log" -ErrorAction SilentlyContinue | Sort-Object naam - aflopend | Select-Object - Eerste 1 if ($logFile) { Write-Host "" Write-Host "RECENT LOGBOEK" -ForegroundColor Yellow Write-Host ("-" * 40) Get-Content $logFile.FullName -Tail 20 | ForEach-Object { if ($_ -match '\[ERROR\]') { Write-Host $_ -ForegroundColor Red } elseif ($_ -match '\[WARN\]') { Write-Host $_ -ForegroundColor Yellow } elseif ($_ -match '\[OK\]') { Write-Host $_ -ForegroundColor Green } elseif ($_ -match '\[WAVE\]') { Write-Host $_ -ForegroundColor Cyan } else { Write-Host $_ -ForegroundColor Gray } } } } Write-Host "" Write-Host ("-" * 80) -ForegroundColor DarkGray indien (-niet $ShowLog -of -niet $ShowWaves -of -niet $ShowBlocked) { Write-Host "Opties: -ShowLog | -ShowWaves | -ShowBlocked | -OpenDashboard | -Watch 30" -ForegroundColor DarkGray } }
# ============================================================================ # MAIN # ============================================================================
if (-not (Test-Path $ReportBasePath)) { Write-Host 'Rapportpad niet gevonden: $ReportBasePath' -ForegroundColor Red afsluiten 1 }
if ($Watch -gt 0) { Write-Host 'Status elke $Watch seconden bekijken. Druk op Ctrl+C om te stoppen." -ForegroundColor Cyan while ($true) { Show-Status Start-Sleep -Seconden $Watch } } else { Show-Status }