Αντιγράψτε και επικολλήστε αυτό το δείγμα δέσμης ενεργειών και τροποποιήστε το ανάλογα με τις ανάγκες σας για το περιβάλλον σας:
<# . ΣΎΝΟΨΗ Εμφανίζει την τρέχουσα κατάσταση του ενορχηστρωτή κυκλοφορίας ασφαλούς εκκίνησης.
.DESCRIPTION Παρέχει ορατότητα σε πραγματικό χρόνο στην πρόοδο της κυκλοφορίας: - Τρέχων αριθμός κύματος και συσκευές που στοχεύουν - Οι συσκευές ενημερώθηκαν έναντι εκκρεμών - Αποκλεισμένοι κάδοι που απαιτούν προσοχή - Αρχείο καταγραφής πρόσφατης δραστηριότητας - Σύνδεση πίνακα εργαλείων Εκτελέστε το ανά πάσα στιγμή για να δείτε την πρόοδο της κυκλοφορίας.
.PARAMETER ReportBasePath Διαδρομή για την αναφορά/κρατικό κατάλογο που χρησιμοποιείται από τον ενορχηστρωτή
.PARAMETER ShowLog Εμφάνιση πρόσφατων καταχωρήσεων αρχείου καταγραφής (τελευταίες 50 γραμμές)
.PARAMETER ShowBlocked Εμφάνιση λεπτομερειών αποκλεισμένων κάδων
.PARAMETER ShowWaves Εμφάνιση ιστορικού κυμάτων με το πλήθος συσκευών
.PARAMETER Watch Συνεχής ανανέωση κατάστασης κάθε N δευτερόλεπτα
.PARAMETER OpenDashboard Άνοιγμα του πιο πρόσφατου πίνακα εργαλείων HTML στο πρόγραμμα περιήγησης
.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(Mandatory = $true)] [συμβολοσειρά]$ReportBasePath, [Parameter(Mandatory = $false)] [switch]$ShowLog, [Parameter(Mandatory = $false)] [switch]$ShowBlocked, [Parameter(Mandatory = $false)] [switch]$ShowWaves, [Parameter(Mandatory = $false)] [int]$Watch = 0, [Parameter(Mandatory = $false)] [switch]$OpenDashboard )
$ErrorActionPreference = "Stop" $DownloadUrl = "https://aka.ms/getsecureboot" $DownloadSubPage = "Δείγματα ανάπτυξης και παρακολούθησης"
# Note: This script has no dependencies on other scripts. # Για το πλήρες πακέτο εργαλείων, κάντε λήψη από: $DownloadUrl -> $DownloadSubPage
# ============================================================================ ΣΥΝΑΡΤΉΣΕΙς # HELPER # ============================================================================
function ConvertTo-Hashtable { param([Parameter(ValueFromPipeline = $true)]$InputObject) διεργασία { if ($null -eq $InputObject) { return @{} } if ($InputObject -is [System.Collections.IDictionary]) { return $InputObject } if ($InputObject -is [PSCustomObject]) { $hash = @{} foreach ($prop στο $InputObject.PSObject.Properties) { $hash[$prop. Name] = ConvertTo-Hashtable $prop. Τιμή } επιστροφή $hash } if ($InputObject -is [System.Collections.IEnumerable] -and $InputObject -isnot [string]) { return @($InputObject | ForEach-Object { ConvertTo-Hashtable $_ }) } επιστροφή $InputObject } }
function Show-Status { $stateDir = Join-Path $ReportBasePath "Κατάσταση παράδοσης" $rolloutStatePath = Join-Path $stateDir "RolloutState.json" $blockedBucketsPath = Join-Path $stateDir "BlockedBuckets.json" Clear-Host Write-Host "" Write-Host ("=" * 80) -ForegroundColor Cyan Write-Host " SECURE BOOT ROLLOUT STATUS" -ForegroundColor Cyan Write-Host " $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')" -ForegroundColor Gray Write-Host ("=" * 80) -ForegroundColor Cyan Write-Host "" # Ελέγξτε αν εκτελείται η εργασία του ενορχηστρωτή $task = Get-ScheduledTask -Όνομα_εργασίας "SecureBoot-Rollout-Orchestrator" -ErrorAction SilentlyContinue if ($task) { $taskState = $task. Κράτος $color = if ($taskState -eq "Running") { "Green" } elseif ($taskState -eq "Ready") { "Yellow" } else { "Red" } Write-Host "Προγραμματισμένη εργασία: " -NoNewline Write-Host $taskState -$color ForegroundColor } άλλος { Write-Host "Προγραμματισμένη εργασία: " -NoNewline Write-Host "Δεν έχει εγκατασταθεί" -Γκρι χρώμα πρώτου πλάνου } # Load rollout state (Φόρτωση κατάστασης παράδοσης) if (-not (Test-Path $rolloutStatePath)) { Write-Host "" Write-Host "Δεν βρέθηκε κατάσταση παράδοσης. Ο Orchestrator μπορεί να μην έχει ξεκινήσει ακόμα." -ForegroundColor Yellow Write-Host "Διαδρομή κατάστασης: $rolloutStatePath" -ForegroundColor Gray Επιστρέψει } $state = Get-Content $rolloutStatePath -Raw | ConvertFrom-Json | ConvertTo-Hashtable Write-Host "" Write-Host "ROLLOUT PROGRESS" -ForegroundColor Yellow Write-Host ("-" * 40) $status = $state. Κατάσταση $statusColor = διακόπτης ($status) { "Ολοκληρώθηκε" { "Πράσινο" } "InProgress" { "Κυανό" } "NotStarted" { "Gray" } προεπιλογή { "Λευκό" } } Write-Host "Κατάσταση: " -NoNewline Write-Host $status -$statusColor ForegroundColor Write-Host "Τρέχον κύμα: $($state. CurrentWave)" Write-Host "Συνολικός στόχος: $($state. TotalDevicesTargeted)" Write-Host "Το σύνολο ενημερώθηκε: $($state. TotalDevicesUpdated)" εάν ($state. StartedAt) { Write-Host "Ξεκίνησε: $($state. StartedAt)" } εάν ($state. Τελευταία συνάθροιση) { Write-Host "Τελευταίος έλεγχος: $($state. LastAggregation)" } εάν ($state. CompletedAt) { Write-Host "Ολοκληρώθηκε: $($state. CompletedAt)" -ForegroundColor Green } # Εμφάνιση γραμμής προόδου εάν ($state. TotalDevicesTargeted -gt 0) { $pct = εάν ($state. TotalDevicesΑναχρονίστε και $state. TotalDevicesTargeted) { [μαθηματικά]::Round(($state. TotalDevicesΑναχρονίστε / $state. TotalDevicesTargeted) * 100, 1) } άλλος { 0 } Write-Host "" Write-Host "Πρόοδος: " -NoNewline $barWidth = 40 $filled = [μαθηματικά]::Δάπεδο($barWidth * $pct / 100) Write-Host "[" -NoNewline Write-Host ("█" * $filled) -Πράσινο χρώμα πρώτου πλάνου -NoNewline Write-Host ("░" * ($barWidth - $filled)) -ΠροσκήνιοΧρήση DarkGray -NoNewline Write-Host "] $pct%" } Σύνοψη αποκλεισμένων κάδων if (Test-Path $blockedBucketsPath) { $blocked = Get-Content $blockedBucketsPath -Ακατέργαστο | ConvertFrom-Json | ConvertTo-Hashtable εάν ($blocked. Count -gt 0) { Write-Host "" Write-Host "ΑΠΟΚΛΕΙΣΜΈΝΟΙ ΚΟΥΒΆΔΕς: " -NoNewline -ForegroundColor Κόκκινο Write-Host "$($blocked. Count) buckets need attention" -ForegroundColor Red if ($ShowBlocked) { Write-Host "" foreach ($key στο $blocked. Πλήκτρα) { $info = $blocked[$key] Write-Host " ■ $key" -Χρώμα πρώτου πλάνου Κόκκινο Write-Host " Αιτία: $($info. Reason)" -ForegroundColor Gray Write-Host " Συσκευή: $($info. FailedDevice)" -ForegroundColor Gray Write-Host " Από: $($info. BlockedAt)" -ForegroundColor Gray } } άλλος { Write-Host " Εκτέλεση με -ShowBlocked για λεπτομέρειες" -ForegroundColor Gray } } } # Ιστορικό κυμάτων αν ($ShowWaves και $state. WaveHistory - και $state. WaveHistory.Count -gt 0) { Write-Host "" Write-Host "WAVE HISTORY" -ForegroundColor Yellow Write-Host ("-" * 40) foreach ($wave στο $state. WaveHistory) { Write-Host "Κύμα $($wave. WaveNumber): " -NoNewline -ForegroundColor Cyan Write-Host "$($wave. DeviceCount) devices" -NoNewline Write-Host " - $($wave. StartedAt)" -ForegroundColor Gray } } # Πιο πρόσφατος πίνακας εργαλείων $latestAggregation = Get-ChildItem -Διαδρομή $ReportBasePath -Κατάλογος -Φιλτράρισμα "Aggregation_*" -ErrorAction SilentlyContinue | Sort-Object Όνομα - Φθίνουσα | Select-Object -Πρώτα 1 if ($latestAggregation) { $dashboard = Get-ChildItem -Διαδρομή $latestAggregation.FullName -Φιλτράρισμα "*Dashboard*.html" -ErrorAction SilentlyContinue | Select-Object -Πρώτα 1 if ($dashboard) { Write-Host "" Write-Host "LATEST DASHBOARD" -ForegroundColor Yellow Write-Host $dashboard. FullName -ForegroundColor Gray if ($OpenDashboard) { Start-Process $dashboard. Ονοματεπώνυμο } } } # Πρόσφατο αρχείο καταγραφής if ($ShowLog) { $logFile = Get-ChildItem -Διαδρομή $stateDir -Φιλτράρισμα "Orchestrator_*.log" -ErrorAction SilentlyContinue | Sort-Object Όνομα - Φθίνουσα | Select-Object -Πρώτα 1 εάν ($logFile) { Write-Host "" Write-Host "RECENT LOG" -Κίτρινο χρώμα πρώτου πλάνου Write-Host ("-" * 40) Get-Content $logFile.Ονοματεπώνυμο -Ουρά 20 | ForEach-Object { if ($_ -match '\[ERROR\]]') { Write-Host $_ -Πρώτο πλάνοΧρήση Κόκκινο } elseif ($_ -match '\[WARN\]') { Write-Host $_ -ForegroundColor Yellow } elseif ($_ -match '\[OK\]') { Write-Host $_ -ForegroundColor Green } elseif ($_ -match '\[WAVE\]') { Write-Host $_ -ForegroundColor Cyan } άλλος { Write-Host $_ -ForegroundColor Gray } } } } Write-Host "" Write-Host ("-" * 80) -Πρώτο πλάνοΧρήση DarkGray if (-not $ShowLog -or -not $ShowWaves -or -not $ShowBlocked) { Write-Host "Επιλογές: -ShowLog | -ShowWaves | -ShowBlocked | -OpenDashboard | -Watch 30" -ForegroundColor DarkGray } }
# ============================================================================ # MAIN # ============================================================================
if (-not (Test-Path $ReportBasePath)) { Write-Host "Η διαδρομή αναφοράς δεν βρέθηκε: $ReportBasePath" -Χρώμα πρώτου πλάνου Κόκκινο έξοδος 1 }
if ($Watch -gt 0) { Write-Host "Παρακολούθηση κατάστασης κάθε $Watch δευτερόλεπτα. Πατήστε το συνδυασμό πλήκτρων Ctrl+C για διακοπή." -ForegroundColor Cyan ενώ ($true) { Εμφάνιση κατάστασης Start-Sleep -Δευτερόλεπτα $Watch } } άλλος { Εμφάνιση κατάστασης }