Скопіюйте та вставте цей зразок сценарію та змініть його за потреби для свого середовища:

<# . ПІДСУМОК     Відображення поточного стану оркестратора розгортання безпечного завантаження.

.DESCRIPTION     Забезпечує видимість перебігу розгортання в реальному часі:     – номер поточної хвилі та цільові пристрої;     – пристрої, які оновлюються та очікують     - Заблоковані блоки потребують уваги     – журнал останніх дій;     - Посилання на приладну дошку     Запустіть цю програму в будь-який час, щоб дізнатися, як виконується розгортання.     

.PARAMETER ReportBasePath     Шлях до каталогу звіту або стану, що використовується в orchestrator

.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)]     [string]$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 FUNCTIONS # ============================================================================

function ConvertTo-Hashtable {     param([Parameter(ValueFromPipeline = $true)]$InputObject)     процес {         якщо ($null -eq $InputObject) { return @{} }         якщо ($InputObject -це [System.Collections.IDictionary]) { return $InputObject }         якщо ($InputObject -це [PSCustomObject]) {             $hash = @{}             foreach ($prop in $InputObject.PSObject.Properties) {                 $hash[$prop. Name] = ConvertTo-Hashtable $prop. Значення             } (})             повернути $hash         } (})         якщо ($InputObject -це [System.Collections.IEnumerable] -and $InputObject -isnot [string]) {             return @($InputObject | ForEach-Object { ConvertTo-Hashtable $_ })         } (})         повернути $InputObject     } (}) }

function Show-Status {     $stateDir = Join-Path $ReportBasePath "RolloutState"     $rolloutStatePath = Join-Path $stateDir "RolloutState.json"     $blockedBucketsPath = Join-Path $stateDir "BlockedBuckets.json"     Очистити хост     Write-Host ""     Write-Host ("=" * 80) -ForegroundColor Cyan     Write-Host "СТАН РОЗГОРТАННЯ БЕЗПЕЧНОГО ЗАВАНТАЖЕННЯ" -ForegroundColor Cyan     Write-Host " $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')" -ForegroundColor Gray     Write-Host ("=" * 80) -ForegroundColor Cyan     Write-Host ""     # Перевірка виконання завдання orchestrator     $task = Get-ScheduledTask -TaskName "SecureBoot-Rollout-Orchestrator" -ErrorAction SilentlyContinue     якщо ($task) {         $taskState = $task. Держави         $color = if ($taskState -eq "Running") { "Green" } elseif ($taskState -eq "Ready") { "Yellow" } else { "Red" }         Write-Host "Заплановане завдання: " -NoNewline         Write-Host $taskState -foregroundColor $color     } інакше {         Write-Host "Заплановане завдання: " -NoNewline         Write-Host "Не інстальовано" -ForegroundColor Gray     } (})     # Стан розгортання завантаження     якщо (-not (test-path $rolloutStatePath)) {         Write-Host ""         Write-Host "Стан розгортання не знайдено.                Orchestrator, можливо, ще не запущено." -ForegroundColor Yellow         Write-Host "Шлях стану: $rolloutStatePath" -ForegroundColor Gray         Повернутися     } (})          $state = Get-Content $rolloutStatePath -Raw | ConvertFrom-Json | Перетворити на геш-таблицю          Write-Host ""     Write-Host "ПЕРЕБІГ РОЗГОРТАННЯ" -ForegroundColor Yellow     Write-Host ("-" * 40)          $status = $state. Статус     $statusColor = перемикач ($status) {         "Завершено" { "Зелений" }         "InProgress" { "Блакитний" }         "Непочато" { "Сірий" }         за замовчуванням { "Білий" }     } (})          Write-Host "Стан: " -NoNewline     Write-Host $status –$statusColor колір переднього плану     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. TotalDevicesUpdated – і $state. TotalDevicesTargeted) {             [math]::Round(($state. TotalDevicesUpdated / $state. TotalDevicesTargeted) * 100, 1)         } ще { 0 }                  Write-Host ""         Write-Host "Прогрес: " -NoNewline         $barWidth = 40         $filled = [math]::Floor($barWidth * $pct / 100)         Write-Host "[" -NoNewline         Write-Host ("█" * $filled) -ForegroundColor Green -NoNewline         Write-Host ("░" * ($barWidth - $filled)) -ForegroundColor DarkGray -NoNewline         Write-Host "] $pct%"     } (})          # Зведення блоків заблокованих блоків     якщо ($blockedBucketsPath тестового шляху) {         $blocked = Get-Content $blockedBucketsPath -Raw | ConvertFrom-Json | Перетворити на геш-таблицю         якщо ($blocked. Кількість -gt 0) {             Write-Host ""             Write-Host "ЗАБЛОКОВАНІ БЛОКИ: " -NoNewline -ForegroundColor Red             Write-Host "$($blocked. Кількість) блоки потребують уваги" -ForegroundColor Red                          якщо ($ShowBlocked) {                 Write-Host ""                 ($key в $blocked. Клавіші) {                     $info = $blocked[$key]                     Write-Host " ► $key" -ForegroundColor Red                     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)                  ($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 -Path $ReportBasePath -Directory - Filter "Aggregation_*" -ErrorAction SilentlyContinue |         ім'я Sort-Object –за спаданням |         Select-Object –Перший 1          якщо ($latestAggregation) {         $dashboard = Get-ChildItem -Path $latestAggregation.FullName -filter "*Dashboard*.html" -ErrorAction SilentlyContinue |             Select-Object –Перший 1                  якщо ($dashboard) {             Write-Host ""             Write-Host "ОСТАННЯ ПРИЛАДНА ДОШКА" -ForegroundColor Yellow             Write-Host $dashboard. FullName – колір переднього плану із сірим кольором                          якщо ($OpenDashboard) {                 Start-Process $dashboard. Повне ім'я             } (})         } (})     } (})          # Останні журнали     якщо ($ShowLog) {         $logFile = Get-ChildItem -Path $stateDir -Filter "Orchestrator_*.log" -ErrorAction SilentlyContinue |             ім'я Sort-Object –за спаданням |             Select-Object –Перший 1                  якщо ($logFile) {             Write-Host ""             Write-Host "RECENT LOG" -ForegroundColor Yellow             Write-Host ("-" * 40)                          Get-Content $logFile.FullName -Tail 20 | ForEach-Object {                 якщо ($_ – збігається з '\[ERROR\]') {                     Write-Host $_ - Червоний колір переднього плану                 } elseif ($_ - match '\[WARN\]') {                     Write-Host $_ - Колір переднього плану Жовтий                 } elseif ($_ - match '\[OK\]') {                     Write-Host $_ - Зелений колір переднього плану                 } elseif ($_ - match '\[WAVE\]') {                     Write-Host $_ - Блакитний колір переднього плану                 } інакше {                     Write-Host $_ -ForegroundColor Gray                 } (})             } (})         } (})     } (})          Write-Host ""     Write-Host ("-" * 80) -ForegroundColor DarkGray          якщо (-не $ShowLog -або -not $ShowWaves -або -not $ShowBlocked) {         Write-Host "Параметри: -ShowLog | -ShowWaves | -Показати заблоковано | -OpenDashboard | -Watch 30" -ForegroundColor DarkGray     } (}) }

# ============================================================================ # ОСНОВНЕ # ============================================================================

if (-not (Test-Path $ReportBasePath)) {     Write-Host "Шлях звіту не знайдено: $ReportBasePath" -Червоний колір переднього плану     вихід 1 }

if ($Watch -gt 0) {     Write-Host "Перегляд стану кожні $Watch секунд. Натисніть клавіші Ctrl+C, щоб зупинити. -ForegroundColor Cyan     в той час як ($true) {         Показати стан         Start-Sleep –секунди $Watch     } (}) } інакше {     Показати стан }  

Потрібна додаткова довідка?

Потрібні додаткові параметри?

Ознайомтеся з перевагами передплати, перегляньте навчальні курси, дізнайтесь, як захистити свій пристрій тощо.