Salin dan tempelkan contoh skrip ini dan ubah sesuai kebutuhan untuk lingkungan Anda:

<# . SINOPSIS     Memperlihatkan status saat ini dari orkestrator peluncuran Boot Aman.

.DESCRIPTION     Menyediakan visibilitas real-time ke kemajuan peluncuran:     - Nomor gelombang saat ini dan perangkat yang ditargetkan     - Perangkat diperbarui vs tertunda     - Ember yang diblokir memerlukan perhatian     - Log aktivitas terakhir     - Link dasbor     Jalankan ini kapan saja untuk melihat kemajuan peluncuran.     

.PARAMETER ReportBasePath     Jalur ke direktori laporan/status yang digunakan oleh orkestrator

.PARAMETER ShowLog     Menampilkan entri log terbaru (50 baris terakhir)

.PARAMETER ShowBlocked     Memperlihatkan detail wadah yang diblokir

.PARAMETER ShowWaves     Memperlihatkan riwayat gelombang dengan jumlah perangkat

.PARAMETER Watch     Status refresh terus menerus setiap N detik

.PARAMETER OpenDashboard     Membuka dasbor HTML terbaru di 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(Wajib = $true)]     [string]$ReportBasePath,     [Parameter(Wajib = $false)]     [sakelar]$ShowLog,     [Parameter(Wajib = $false)]     [sakelar]$ShowBlocked,     [Parameter(Wajib = $false)]     [sakelar]$ShowWaves,     [Parameter(Wajib = $false)]     [int]$Watch = 0,     [Parameter(Wajib = $false)]     [sakelar]$OpenDashboard )                         

$ErrorActionPreference = "Stop" $DownloadUrl = "https://aka.ms/getsecureboot" $DownloadSubPage = "Sampel Penyebaran dan Pemantauan"

# Note: This script has no dependencies on other scripts. # Untuk peralatan lengkap, unduh dari: $DownloadUrl -> $DownloadSubPage

# ============================================================================ # FUNGSI HELPER # ============================================================================

function ConvertTo-Hashtable {     param([Parameter(ValueFromPipeline = $true)]$InputObject)     proses {         if ($null -eq $InputObject) { return @{} }         if ($InputObject -is [System.Collections.IDictionary]) { return $InputObject }         if ($InputObject -is [PSCustomObject]) {             $hash = @{}             foreach ($prop di $InputObject.PSObject.Properties) {                 $hash[$prop. Nama] = ConvertTo-Hashtable $prop. Nilai             }             $hash pengembalian         }         if ($InputObject -is [System.Collections.IEnumerable] -and $InputObject -isnot [string]) {             return @($InputObject | ForEach-Object { ConvertTo-Hashtable $_ })         }         $InputObject pengembalian     } }

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 Sian     Write-Host " STATUS PELUNCURAN BOOT AMAN" -ForegroundColor Sian     Write-Host " $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')" -ForegroundColor Gray     Write-Host ("=" * 80) -ForegroundColor Sian     Write-Host ""     # Periksa apakah tugas orkestrator sedang berjalan     $task = Get-ScheduledTask -TaskName "SecureBoot-Rollout-Orchestrator" -ErrorAction SilentlyContinue     if ($task) {         $taskState = $task. Negara         $color = if ($taskState -eq "Running") { "Green" } elseif ($taskState -eq "Ready") { "Yellow" } else { "Red" }         Write-Host "Tugas Terjadwal: " -NoNewline         Write-Host $taskState -ForegroundColor $color     } lain {         Write-Host "Tugas Terjadwal: " -NoNewline         Write-Host "Tidak Terinstal" -ForegroundColor Gray     }     # Muat status peluncuran     if (-not (Test-Path $rolloutStatePath)) {         Write-Host ""         Write-Host "Tidak ditemukan status peluncuran.                Orkestrator mungkin belum dimulai." -ForegroundColor Yellow         Write-Host "Jalur negara: $rolloutStatePath" -ForegroundColor Gray         Kembali     }          $state = Get-Content $rolloutStatePath -Raw | ConvertFrom-Json | ConvertTo-Hashtable          Write-Host ""     Write-Host "KEMAJUAN PELUNCURAN" -ForegroundColor Yellow     Write-Host ("-" * 40)          $status = $state. Status     $statusColor = sakelar ($status) {         "Selesai" { "Hijau" }         "InProgress" { "Cyan" }         "NotStarted" { "Gray" }         default { "White" }     }          Write-Host "Status: " -NoNewline     Write-Host $status -ForegroundColor $statusColor     Write-Host "Current Wave: $($state. CurrentWave)"     Write-Host "Total Ditargetkan: $($state. TotalDevicesTargeted)"     Write-Host "Total Diperbarui: $($state. TotalDevicesUpdated)"          jika ($state. StartedAt) {         Write-Host "Mulai: $($state. StartedAt)"     }     jika ($state. LastAggregation) {         Write-Host "Pemeriksaan Terakhir: $($state. LastAggregation)"     }     jika ($state. CompletedAt) {         Write-Host "Selesai: $($state. CompletedAt)" -ForegroundColor Green     }          # Tampilkan bilah kemajuan     jika ($state. TotalDevicesTargeted -gt 0) {         $pct = jika ($state. TotalDevicesUpdated -dan $state. TotalDevicesTargeted) {             [matematika]::Round(($state. TotalDevicesUpdated / $state. TotalDevicesTargeted) * 100, 1)         } lagi { 0 }                  Write-Host ""         Write-Host "Kemajuan: " -NoNewline         $barWidth = 40         $filled = [matematika]::Floor($barWidth * $pct / 100)         Write-Host "[" -NoNewline         Write-Host ("█" * $filled) -Hijau ForegroundColor -NoNewline         Write-Host ("░" * ($barWidth - $filled)) -Warna Latar Depan DarkGray -NoNewline         Write-Host "] $pct%"     }          # Ringkasan wadah yang diblokir     if (Test-Path $blockedBucketsPath) {         $blocked = Get-Content $blockedBucketsPath -Raw | ConvertFrom-Json | ConvertTo-Hashtable         jika ($blocked. Hitung -gt 0) {             Write-Host ""             Write-Host "BUCKET YANG DIBLOKIR: " -NoNewline -ForegroundColor Red             Write-Host "$($blocked. Hitung) ember perlu diperhatikan" -ForegroundColor Red                          if ($ShowBlocked) {                 Write-Host ""                 ($key di $blocked. Tombol) {                     $info = $blocked[$key]                     Write-Host " ► $key" -ForegroundColor Merah                     Write-Host " Alasan: $($info. Alasan)" -ForegroundColor Gray                     Write-Host " Perangkat: $($info. FailedDevice)" -ForegroundColor Gray                     Write-Host " Sejak: $($info. BlockedAt)" -ForegroundColor Gray                 }             } lain {                 Write-Host " Jalankan dengan -ShowBlocked untuk detail" -ForegroundColor Gray             }         }     }          # Riwayat gelombang     jika ($ShowWaves -dan $state. WaveHistory -dan $state. WaveHistory.Count -gt 0) {         Write-Host ""         Write-Host "WAVE HISTORY" -ForegroundColor Yellow         Write-Host ("-" * 40)                  ($wave di $state. WaveHistory) {             Write-Host "Wave $($wave. WaveNumber): " -NoNewline -ForegroundColor Cyan             Write-Host "$($wave. DeviceCount) perangkat" -NoNewline             Write-Host " - $($wave. StartedAt)" -ForegroundColor Gray         }     }          # Dasbor terbaru     $latestAggregation = Get-ChildItem -Path $ReportBasePath -Directory -Filter "Aggregation_*" -ErrorAction SilentContinue |         Nama Sort-Object -Turun |         Select-Object -1      Pertama     if ($latestAggregation) {         $dashboard = Get-ChildItem -Path $latestAggregation.FullName -Filter "*Dashboard*.html" -ErrorAction SilentlyContinue |             Select-Object -1          Pertama         if ($dashboard) {             Write-Host ""             Write-Host "DASBOR TERBARU" -ForegroundColor Yellow             Write-Host $dashboard. FullName -ForegroundColor Gray                          if ($OpenDashboard) {                 Start-Process $dashboard. Nama Lengkap             }         }     }          # Log terbaru     if ($ShowLog) {         $logFile = Get-ChildItem -Path $stateDir -Filter "Orchestrator_*.log" -ErrorAction SilentLyContinue |             nama Sort-Object -Turun |             Select-Object -1          Pertama         if ($logFile) {             Write-Host ""             Write-Host "LOG TERBARU" -ForegroundColor Yellow             Write-Host ("-" * 40)                          Get-Content $logFile.FullName -Tail 20 | ForEach-Object {                 if ($_ -match '\[ERROR\]') {                     Write-Host $_ -Warna Latar Depan Merah                 } elseif ($_ -match '\[WARN\]') {                     Write-Host $_ -ForegroundColor Yellow                 } elseif ($_ -match '\[OK\]') {                     Write-Host $_ -ForegroundColor Hijau                 } elseif ($_ -match '\[WAVE\]') {                     Write-Host $_ -ForegroundColor Cyan                 } lain {                     Write-Host $_ -Warna Latar Depan Abu-abu                 }             }         }     }          Write-Host ""     Write-Host ("-" * 80) -ForegroundColor DarkGray          if (-not $ShowLog -or -not $ShowWaves -or -not $ShowBlocked) {         Write-Host "Opsi: -ShowLog | -ShowWaves | -ShowBlocked | -OpenDashboard | -Watch 30" -ForegroundColor DarkGray     } }

# ============================================================================ # MAIN # ============================================================================

if (-not (Test-Path $ReportBasePath)) {     Write-Host "Jalur laporan tidak ditemukan: $ReportBasePath" -ForegroundColor Red     keluar 1 }

if ($Watch -gt 0) {     Write-Host "Menonton status setiap $Watch detik. Tekan Ctrl+C untuk menghentikan." -ForegroundColor Cyan     sementara ($true) {         Status-Peragaan         Start-Sleep -Detik $Watch     } } lain {     Status-Peragaan }  

Perlu bantuan lainnya?

Ingin opsi lainnya?

Jelajahi manfaat langganan, telusuri kursus pelatihan, pelajari cara mengamankan perangkat Anda, dan banyak lagi.