Nukopijuokite ir įklijuokite šį scenarijaus pavyzdį ir modifikuokite, kiek reikia jūsų aplinkai:
<# . ANOTACIJA Rodo dabartinę saugiosios įkrovos diegimo valdymo modulio būseną.
.DESCRIPTION Suteikia galimybę realiuoju laiku matyti diegimo eigą: - Dabartinis bangų skaičius ir įrenginiai tikslinį - Įrenginiai atnaujinti ir laukiantys - Užblokuotos talpyklos, į kurias reikia atkreipti dėmesį - Naujausios veiklos žurnalas - Ataskaitų srities saitas Paleiskite šią funkciją bet kuriuo metu, kad pamatytumėte, kaip vykdomas diegimas.
.PARAMETER ReportBasePath Kelias į ataskaitų / būsenų katalogą, kurį naudoja valdymo modulis
.PARAMETER ShowLog Rodyti naujausius žurnalo įrašus (paskutinės 50 eilučių)
.PARAMETER ShowBlocked Rodyti informaciją apie užblokuotas talpyklas
.PARAMETER ShowWaves Rodyti bangų istoriją su įrenginių skaičiais
.PARAMETER Watch Nuolat atnaujinti būseną kas N sekundes
.PARAMETER OpenDashboard Atidaryti naujausią HTML ataskaitų sritį naršyklėje
.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( [Parametras(Privalomas = $true)] [eilutė]$ReportBasePath, [Parametras(Privalomas = $false)] [jungiklis]$ShowLog, [Parametras(Privalomas = $false)] [jungiklis]$ShowBlocked, [Parametras(Privalomas = $false)] [jungiklis]$ShowWaves, [Parametras(Privalomas = $false)] [sveikasis skaičius]$Watch = 0, [Parametras(Privalomas = $false)] [jungiklis]$OpenDashboard )
$ErrorActionPreference = "Stop" $DownloadUrl = "https://aka.ms/getsecureboot" $DownloadSubPage = "Diegimo ir stebėjimo pavyzdžiai"
# Note: This script has no dependencies on other scripts. # Viso įrankių rinkinio atsisiuntimas iš: $DownloadUrl -> $DownloadSubPage
# ============================================================================ # PAGALBININKAS FUNKCIJOS # ============================================================================
function ConvertTo-Hashtable { param([Parameter(ValueFromPipeline = $true)]$InputObject) procesas { jei ($null -eq $InputObject) { return @{} } jei ($InputObject -is [System.Collections.IDictionary]) { return $InputObject } jei ($InputObject -is [PSCustomObject]) { $hash = @{} foreach ($prop in $InputObject.PSObject.Properties) { $hash[$prop. Pavadinimas] = ConvertTo-Hashtable $prop. Vertė } grąžinimo $hash } jei ($InputObject - yra [System.Collections.IEnumerable] -and $InputObject -isnot [string]) { return @($InputObject | ForEach-Object { ConvertTo-Hashtable $_ }) } grąžinimo $InputObject } }
function Show-Status { $stateDir = Join-Path $ReportBasePath "RolloutState" $rolloutStatePath = Join-Path $stateDir "RolloutState.json" $blockedBucketsPath = Join-Path $stateDir "BlockedBuckets.json" Valyti pagrindinį kompiuterį Write-Host Write-Host ("=" * 80) - Priekinio planopalva žydra Write-Host " SECURE BOOT ROLLOUT STATUS" -ForegroundColor Cyan Write-Host " $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')" -Priekinio planopalva Pilka Write-Host ("=" * 80) - Priekinio plano spalvos žydra Write-Host " # Patikrinkite, ar veikia valdymo modulio užduotis $task = Get-ScheduledTask -TaskName "SecureBoot-Rollout-Orchestrator" -ErrorAction SilentlyContinue jei ($task) { $taskState = $task. Valstybės $color = if ($taskState -eq "Running") { "Green" } elseif ($taskState -eq "Ready") { "Yellow" } else { "Red" } Write-Host "Suplanuota užduotis: " -NoNewline Write-Host $taskState -ForegroundColor $color } dar { Write-Host "Suplanuota užduotis: " -NoNewline Write-Host "Neįdiegta" – priekinio planopalva pilka } # Įkėlimo diegimo būsena jei (-not (testo kelias $rolloutStatePath)) { Write-Host Write-Host "Nepavyko rasti diegimo būsenos. Gali būti, kad valdymo modulis dar nepradėta." -ForegroundColor Yellow Write-Host "State path: $rolloutStatePath" (būsenos kelias: $rolloutStatePath) – pilka priekinio plano spalva Grįžti } $state = Get-Content $rolloutStatePath -Neapdorota | ConvertFrom-Json | Konvertuoti į maišos lentelę Write-Host " Write-Host "ROLLOUT PROGRESS" – geltona priekinio plano spalva Write-Host ("-" * 40) $status = $state. Būsena $statusColor = jungiklis ($status) { "Completed" { "Green" } "InProgress" { "Cyan" } "NotStarted" { "Gray" } numatytoji reikšmė { "Baltas" } } Write-Host "Būsena: " -NoNewline Write-Host $status -ForegroundColor $statusColor Write-Host "Dabartinė banga: $($state. CurrentWave)" Write-Host "Total Targeted: $($state. TotalDevicesTargeted)" Write-Host "Iš viso atnaujinta: $($state. TotalDevicesUpdated)" jei ($state. StartedAt) { Write-Host "Pradėta: $($state. "StartedAt")" } jei ($state. LastAggregation) { Write-Host "Paskutinis tikrinimas: $($state. LastAggregation)" } jei ($state. UžbaigtaAt) { Write-Host "Baigta: $($state. CompletedAt)" -Priekinio planopalva Žalia } # Rodyti eigos juostą jei ($state. TotalDevicesTargeted -gt 0) { $pct = if ($state. TotalDevicesUpdated – ir $state. TotalDevicesTargeted) { [matematika]::Round(($state. TotalDevicesUpdated / $state. TotalDevicesTargeted) * 100, 1) Dar } { 0 } Write-Host Write-Host "Eiga: " -NoNewline $barWidth = 40 $filled = [matematika]::Floor($barWidth * $pct / 100) Write-Host "[" -NoNewline Write-Host (█* $filled) -Priekinio planopalva žalia -NoNewline Write-Host (░" * ($barWidth - $filled)) -Priekinio planopalva DarkGray -NoNewline Write-Host $pct%" } # užblokuotų talpyklų suvestinė if (Test-Path $blockedBucketsPath) { $blocked = Get-Content $blockedBucketsPath -Neapdorota | ConvertFrom-Json | Konvertuoti į maišos lentelę jei ($blocked. Skaičiavimas -gt 0) { Write-Host Write-Host "UŽBLOKUOTOS TALPYKLOS: " -NoNewline -Priekinio planopalva raudona Write-Host "$($blocked. Count) kibirai reikia dėmesio" -Priekinio planoColor Raudona jei ($ShowBlocked) { Write-Host "" ($key $blocked. Klavišai) { $info = $blocked[$key] Write-Host " ► $key" - Priekinio plano spalva Raudona Write-Host " Priežastis: $($info. Reason)" -Priekinio planopalva pilka Write-Host " Įrenginys: $($info. FailedDevice)" -Priekinio planopalva pilka Write-Host " Nuo: $($info. BlockedAt)" -Priekinio planopalva pilka } } dar { Write-Host " Run with -ShowBlocked for details" -ForegroundColor Gray } } } # Bangų istorija jei ($ShowWaves ir $state. WaveHistory ir $state. WaveHistory.Count -gt 0) { Write-Host Write-Host "WAVE HISTORY" – geltona priekinio plano spalva Write-Host ("-" * 40) ($wave $state. WaveHistory) { Write-Host "Wave $($wave. WaveNumber): " -NoNewline -ForegroundColor Cyan Write-Host "$($wave. DeviceCount) įrenginiai" -NoNewline Write-Host " - $($wave. StartedAt)" -Priekinio planopalva pilka } } # Naujausia ataskaitų sritis $latestAggregation = Get-ChildItem -Path $ReportBasePath -Directory -Filter "Aggregation_*" -ErrorAction SilentlyContinue | Sort-Object pavadinimas – mažėjimo tvarka | Select-Object – pirmas 1 jei ($latestAggregation) { $dashboard = Get-ChildItem -Path $latestAggregation.FullName -Filter "*Dashboard*.html" -ErrorAction SilentlyContinue | Select-Object – 1 pirmas jei ($dashboard) { Write-Host Write-Host "NAUJAUSIA ATASKAITŲ SRITIS" – priekinio planopalva geltona Write-Host $dashboard. FullName – priekinio planopalva pilka jei ($OpenDashboard) { Start-Process $dashboard. Vardas ir pavardė } } } # Naujausias žurnalas jei ($ShowLog) { $logFile = Get-ChildItem -Path $stateDir -Filter "Orchestrator_*.log" -ErrorAction SilentlyContinue | Sort-Object pavadinimas – mažėjimo tvarka | Select-Object 1 pirmas jei ($logFile) { Write-Host Write-Host "RECENT LOG" –Priekinio planopalva geltona Write-Host ("-" * 40) Get-Content $logFile.FullName - Tail 20 | ForEach-Object { jei ($_ -match '\[ERROR\]') { Write-Host $_ -Priekinio planopalva raudona } elseif ($_ -match '\[WARN\]') { Write-Host $_ -Priekinio planopalva geltona } elseif ($_ -match '\[OK\]') { Write-Host $_ -ForegroundColor Green } elseif ($_ -match '\[WAVE\]') { Write-Host $_ -ForegroundColor Cyan } dar { Write-Host $_ -Priekinio planopalva pilka } } } } Write-Host Write-Host ("-" * 80) - Priekinio planopalva DarkGray jei (-not $ShowLog -or -not $ShowWaves -or -not $ShowBlocked) { Write-Host "Parinktys: -ShowLog | -"ShowWaves" | -Atblokuota | -OpenDashboard | -Žiūrėti 30" - Priekinio planoColor DarkGray } }
# ============================================================================ # MAIN # ============================================================================
if (-not (Test-Path $ReportBasePath)) { Write-Host "Ataskaitos kelias nerastas: $ReportBasePath" – priekinio planopalva raudona išeiti iš 1 }
if ($Watch -gt 0) { Write-Host "Watching status every $Watch seconds. Paspauskite Ctrl + C, kad sustabdytumėte." -ForegroundColor Cyan o ($true) { Rodyti būseną Start-Sleep – $Watch sekundės } } dar { Rodyti būseną }