Sao chép và dán tập lệnh mẫu này và sửa đổi khi cần thiết cho môi trường của bạn:

<# . TÓM TẮT     Hiển thị trạng thái hiện tại của trình triển khai Khởi động An toàn.

.DESCRIPTION     Cung cấp khả năng hiển thị trong thời gian thực về tiến độ triển khai:     - Số sóng hiện tại và các thiết bị được nhắm mục tiêu     - Các thiết bị được cập nhật so với đang chờ xử lý     - Bộ chứa bị chặn đòi hỏi sự chú ý     - Nhật ký hoạt động gần đây     - Liên kết bảng điều khiển     Chạy công cụ này bất cứ lúc nào để xem quá trình triển khai đang diễn ra như thế nào.     

.PARAMETER ReportBasePath     Đường dẫn đến báo cáo/thư mục tiểu bang được sử dụng bởi orchestrator

.PARAMETER ShowLog     Hiển thị các mục nhật ký gần đây (50 dòng gần đây)

.PARAMETER ShowBlocked     Hiển thị chi tiết về bộ chứa bị chặn

.PARAMETER ShowWaves     Hiển thị lịch sử sóng với số lượng thiết bị

.PARAMETER Watch     Liên tục làm mới trạng thái mỗi N giây

.PARAMETER OpenDashboard     Mở bảng điều khiển HTML mới nhất trong trình duyệt

.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)]     [chuỗi]$ReportBasePath,     [Parameter(Mandatory = $false)]     [chuyển]$ShowLog,     [Parameter(Mandatory = $false)]     [switch]$ShowBlocked,     [Parameter(Mandatory = $false)]     [switch]$ShowWaves,     [Parameter(Mandatory = $false)]     [int]$Watch = 0,     [Parameter(Mandatory = $false)]     [chuyển]$OpenDashboard )                         

$ErrorActionPreference = "Stop" $DownloadUrl = "https://aka.ms/getsecureboot" $DownloadSubPage = "Triển khai và Giám sát Mẫu"

# Note: This script has no dependencies on other scripts. # Đối với bộ công cụ hoàn chỉnh, tải về từ: $DownloadUrl -> $DownloadSubPage

# ============================================================================ # HÀM HELPER # ============================================================================

function ConvertTo-Hashtable {     param([Parameter(ValueFromPipeline = $true)]$InputObject)     quy trình {         nếu ($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. Name] = ConvertTo-Hashtable $prop. Giá trị             }             trả lại $hash         }         if ($InputObject -is [System.Collections.IEnumerable] -and $InputObject -isnot [string]) {             trả lại @($InputObject | ForEach-Object { ConvertTo-Hashtable $_ })         }         trả lại $InputObject     } }

function Show-Status {     $stateDir = Join-Path $ReportBasePath "RolloutState"     $rolloutStatePath = Join-Path $stateDir "RolloutState.json"     $blockedBucketsPath = Join-Path $stateDir "BlockedBuckets.json"     Xóa Máy chủ     Write-Host ""     Write-Host ("=" * 80) -ForegroundColor Cyan     Write-Host " TRẠNG THÁI TRIỂN KHAI KHỞI ĐỘNG AN TOÀN" -ForegroundColor Cyan     Write-Host " $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')" -ForegroundColor Gray     Write-Host ("=" * 80) -ForegroundColor Cyan     Write-Host ""     # Kiểm tra xem tác vụ của dàn nhạc có đang chạy không     $task = Get-ScheduledTask -TaskName "SecureBoot-Rollout-Orchestrator" -ErrorAction SilentlyContinue     nếu ($task) {         $taskState = $task. Bang         $color = if ($taskState -eq "Đang chạy") { "Xanh lục" } elseif ($taskState -eq "Sẵn sàng") { "Vàng" } khác { "Đỏ" }         Write-Host "Tác vụ đã lên lịch: " -NoNewline         Write-Host $taskState -ForegroundColor $color     } người khác {         Write-Host "Tác vụ đã lên lịch: " -NoNewline         Write-Host "Chưa Cài đặt" -ForegroundColor Gray     }     # Trạng thái triển khai tải     if (-not (Test-Path $rolloutStatePath)) {         Write-Host ""         Write-Host "Không tìm thấy trạng thái triển khai nào.                Orchestrator có thể chưa bắt đầu." -ForegroundColor Yellow         Write-Host "State path: $rolloutStatePath" -ForegroundColor Gray         Trở lại     }          $state = Get-Content $rolloutStatePath -Raw | ConvertFrom-Json | ConvertTo-Hashtable          Write-Host ""     Write-Host TIẾN ĐỘ TRIỂN KHAI" -ForegroundColor Yellow     Write-Host ("-" * 40)          $status = $state. Tình trạng     $statusColor = switch ($status) {         "Đã hoàn thành" { "Xanh lục" }         "InProgress" { "Cyan" }         "NotStarted" { "Gray" }         { "Trắng" mặc định }     }          Write-Host "Trạng thái: " -NoNewline     Write-Host $status -ForegroundColor $statusColor     Write-Host "Current Wave: $($state. CurrentWave)"     Write-Host "Tổng Đã nhắm mục tiêu: $($state. TotalDevicesTargeted)"     Write-Host "Tổng số Cập nhật: $($state. TotalDevicesUpdated)"          nếu ($state. Đã bắt đầuT) {         Write-Host "Đã bắt đầu: $($state. StartedAt)"     }     nếu ($state. LastAggregation) {         Write-Host "Kiểm tra Lần cuối: $($state. LastAggregation)"     }     nếu ($state. CompletedAt) {         Write-Host "Đã hoàn thành: $($state. CompletedAt)" -ForegroundColor Green     }          # Hiển thị thanh tiến độ     nếu ($state. TotalDevicesTargeted -gt 0) {         $pct = if ($state. TotalDevicesUpdated -and $state. TotalDevicesTargeted) {             [math]::Round(($state. TotalDevicesUpdated / $state. TotalDevicesTargeted) * 100, 1)         } khác { 0 }                  Write-Host ""         Write-Host "Tiến độ: " -NoNewline         $barWidth = 40         $filled = [toán học]::Floor($barWidth * $pct / 100)         Write-Host "[" -NoNewline         Write-Host ("█" * $filled) -ForegroundColor Green -NoNewline         Write-Host ("░" * ($barWidth - $filled)) -ForegroundColor DarkGray -NoNewline         Write-Host "] $pct%"     }          # Tóm tắt bộ chứa bị chặn     if (Test-Path $blockedBucketsPath) {         $blocked = Get-Content $blockedBucketsPath -Raw | ConvertFrom-Json | ConvertTo-Hashtable         nếu ($blocked. Đếm -gt 0) {             Write-Host ""             Write-Host "BLOCKED BUCKETS: " -NoNewline -ForegroundColor Red             Write-Host "$($blocked. Count) xô cần chú ý" -ForegroundColor Red                          if ($ShowBlocked) {                 Write-Host ""                 foreach ($key in $blocked. Phím) {                     $info = $blocked[$key]                     Write-Host " ► $key" -ForegroundColor Red                     Write-Host " Lý do: $($info. Lý do)" -ForegroundColor Gray                     Write-Host " Device: $($info. FailedDevice)" -ForegroundColor Gray                     Write-Host " Since: $($info. BlockedAt)" -ForegroundColor Gray                 }             } người khác {                 Write-Host " Chạy với -ShowBlocked để biết chi tiết" -ForegroundColor Gray             }         }     }          # Lịch sử sóng     nếu ($ShowWaves -và $state. WaveHistory -và $state. WaveHistory.Count -gt 0) {         Write-Host ""         Write-Host "LỊCH SỬ SÓNG" -ForegroundColor Yellow         Write-Host ("-" * 40)                  foreach ($wave in $state. WaveHistory) {             Write-Host "Wave $($wave. WaveNumber): " -NoNewline -ForegroundColor Cyan             Write-Host "$($wave. DeviceCount) devices" -NoNewline             Write-Host " - $($wave. StartedAt)" -ForegroundColor Gray         }     }          # Bảng điều khiển mới nhất     $latestAggregation = Get-ChildItem -Path $ReportBasePath -Directory -Filter "Aggregation_*" -ErrorAction SilentlyContinue |         Sort-Object -Giảm dần |         Select-Object -1 đầu tiên          if ($latestAggregation) {         $dashboard = Get-ChildItem -Path $latestAggregation.FullName -Filter "*Dashboard*.html" -ErrorAction SilentlyContinue |             Select-Object -1 đầu tiên                  nếu ($dashboard) {             Write-Host ""             Write-Host "BẢNG ĐIỀU KHIỂN MỚI NHẤT" -ForegroundColor Yellow             Write-Host $dashboard. FullName -ForegroundColor Gray                          if ($OpenDashboard) {                 Start-Process $dashboard. Họ Tên             }         }     }          # Nhật ký gần đây     if ($ShowLog) {         $logFile = Get-ChildItem -Path $stateDir -Filter "Orchestrator_*.log" -ErrorAction SilentlyContinue |             Sort-Object -Giảm dần |             Select-Object -1 đầu tiên                  if ($logFile) {             Write-Host ""             Write-Host "RECENT LOG" -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                 } người khác {                     Write-Host $_ -ForegroundColor Gray                 }             }         }     }          Write-Host ""     Write-Host ("-" * 80) -ForegroundColor DarkGray          if (-not $ShowLog -or -not $ShowWaves -or -not $ShowBlocked) {         Write-Host "Tùy chọn: -ShowLog | -ShowWaves | -ShowBlocked | -OpenDashboard | -Watch 30" -ForegroundColor DarkGray     } }

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

if (-not (Test-Path $ReportBasePath)) {     Write-Host "Không tìm thấy đường dẫn báo cáo: $ReportBasePath" -ForegroundColor Red     thoát 1 }

if ($Watch -gt 0) {     Write-Host "Đang xem trạng thái $Watch giây một lần. Nhấn Ctrl+C để dừng." -ForegroundColor Cyan     trong khi ($true) {         Hiển thị Trạng thái         Start-Sleep -Giây $Watch     } } người khác {     Hiển thị Trạng thái }  

Bạn cần thêm trợ giúp?

Bạn muốn xem các tùy chọn khác?

Khám phá các lợi ích của gói đăng ký, xem qua các khóa đào tạo, tìm hiểu cách bảo mật thiết bị của bạn và hơn thế nữa.