Copie y pegue este script de ejemplo y modifíquelo según sea necesario para su entorno:

<# . SINOOPSIS     Muestra el estado actual del organizador de la implementación de arranque seguro.

.DESCRIPTION     Proporciona visibilidad en tiempo real del progreso de la implementación:     - Número de onda actual y dispositivos dirigidos     - Dispositivos actualizados frente a pendientes     - Cubos bloqueados que requieren atención     - Registro de actividad reciente     - Vínculo Panel     Ejecute esto en cualquier momento para ver cómo avanza la implementación.     

.PARAMETER ReportBasePath     Ruta de acceso al directorio de informe/estado usado por el organizador

.PARAMETER ShowLog     Mostrar entradas de registro recientes (últimas 50 líneas)

.PARAMETER ShowBlocked     Mostrar detalles de cubos bloqueados

.PARAMETER ShowWaves     Mostrar el historial de ondas con el recuento de dispositivos

.PARAMETER Watch     Actualizar continuamente el estado cada N segundos

.PARAMETER OpenDashboard     Abrir el panel HTML más reciente en el explorador

.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()] parámetro(     [Parámetro(Obligatorio = $true)]     [cadena]$ReportBasePath,     [Parámetro(Obligatorio = $false)]     [conmutador]$ShowLog,     [Parámetro(Obligatorio = $false)]     [conmutador]$ShowBlocked,     [Parámetro(Obligatorio = $false)]     [conmutador]$ShowWaves,     [Parámetro(Obligatorio = $false)]     [int]$Watch = 0,     [Parámetro(Obligatorio = $false)]     [conmutador]$OpenDashboard )                         

$ErrorActionPreference = "Stop" $DownloadUrl = "https://aka.ms/getsecureboot" $DownloadSubPage = "Ejemplos de implementación y supervisión"

# Note: This script has no dependencies on other scripts. # Para el conjunto de herramientas completo, descarga desde: $DownloadUrl -> $DownloadSubPage

# ============================================================================ # FUNCIONES AUXILIARES # ============================================================================

function ConvertTo-Hashtable {     parámetro([Parámetro(ValorFromPipeline = $true)]$InputObject)     proceso {         if ($null -eq $InputObject) { return @{} }         if ($InputObject -is [System.Collections.IDictionary]) { return $InputObject }         if ($InputObject -is [PSCustomObject]) {             $hash = @{}             foreach ($prop en $InputObject.PSObject.Properties) {                 $hash[$prop. Name] = ConvertTo-Hashtable $prop. Valor             }             devolver $hash         }         if ($InputObject -is [System.Collections.IEnumerable] -and $InputObject -isnot [string]) {             return @($InputObject | ForEach-Object { ConvertTo-Hashtable $_ })         }         devolver $InputObject     } }

function Show-Status {     $stateDir = Join-Path $ReportBasePath "RolloutState"     $rolloutStatePath = Join-Path $stateDir "RolloutState.json"     $blockedBucketsPath = Join-Path $stateDir "BlockedBuckets.json"     Borrar host     Write-Host ""     Write-Host ("=" * 80) -ForegroundColor Cyan     Write-Host "ESTADO DE IMPLEMENTACIÓN DE ARRANQUE SEGURO" -ForegroundColor Cyan     Write-Host " $(Get-Date -Format 'aaaa-MM-dd HH:mm:ss')" -ForegroundColor Gray     Write-Host ("=" * 80) -ForegroundColor Cyan     Write-Host ""     # Comprueba si la tarea del organizador se está ejecutando     $task = Get-ScheduledTask -TaskName "SecureBoot-Rollout-Orchestrator" -ErrorAction SilentlyContinue     if ($task) {         $taskState = $task. Estado         $color = if ($taskState -eq "Running") { "Green" } elseif ($taskState -eq "Ready") { "Yellow" } else { "Red" }         Write-Host "Tarea programada:" -NoNewline         Write-Host $taskState $color -ForegroundColor     } else {         Write-Host "Tarea programada:" -NoNewline         Write-Host "No instalado" -ForegroundColor Gray     }     # Estado de implementación de carga     if (-not (Test-Path $rolloutStatePath)) {         Write-Host ""         Write-Host "No se encontró ningún estado de implementación.                Es posible que el organizador aún no se haya iniciado". -ForegroundColor Yellow         Write-Host "Ruta de acceso de estado: $rolloutStatePath" -ForegroundColor Gray         devolución     }          $state = Get-Content $rolloutStatePath -Raw | ConvertFrom-Json | ConvertTo-Hashtable          Write-Host ""     Write-Host "PROGRESO DE IMPLEMENTACIÓN" -ForegroundColor Yellow     Write-Host ("-" * 40)          $status = $state. Estado     $statusColor = conmutador ($status) {         "Completado" { "Verde" }         "InProgress" { "Cyan" }         "NotStarted" { "Gray" }         predeterminado { "Blanco" }     }          Write-Host "Estado: " -NoNewline     Write-Host $status $statusColor -ForegroundColor     Write-Host "Ola actual: $($state. CurrentWave)"     Write-Host "Total dirigido: $($state. TotalDevicesTargeted)"     Write-Host "Total actualizado: $($state. TotalDevicesUpdated)"          si ($state. StartedAt) {         Write-Host "Iniciado: $($state. StartedAt)"     }     si ($state. Último agregador) {         Write-Host "Último cheque: $($state. Último agregador)"     }     si ($state. CompletedAt) {         Write-Host "Completado: $($state. CompletedAt)" -ForegroundColor verde     }          # Mostrar la barra de progreso     si ($state. TotalDevicesTargeted -gt 0) {         $pct = if ($state. TotalDevicesUpdated y $state. TotalDevicesTargeted) {             [matemáticas]::Redondo(($state. TotalDevicesUpdated/$state. TotalDevicesTargeted) * 100, 1)         } else { 0 }                  Write-Host ""         Write-Host "Progreso: " -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%"     }          # Resumen de cubos bloqueados     if ($blockedBucketsPath ruta de prueba) {         $blocked = Get-Content $blockedBucketsPath -Raw | ConvertFrom-Json | ConvertTo-Hashtable         if ($blocked. Contar -gt 0) {             Write-Host ""             Write-Host "CUBOS BLOQUEADOS:" -NoNewline -ForegroundColor Red             Write-Host "$($blocked. Contar) cubos requieren atención" -ForegroundColor Red                          if ($ShowBlocked) {                 Write-Host ""                 foreach ($key en $blocked. Teclas) {                     $info = $blocked[$key]                     Write-Host " ") $key" -ForegroundColor Red                     Write-Host " Motivo: $($info. Reason)" -ForegroundColor Gray                     Write-Host " Dispositivo: $($info. FailedDevice)" -ForegroundColor Gray                     Write-Host " Desde: $($info. BlockedAt)" -ForegroundColor Gray                 }             } else {                 Write-Host " Ejecutar con -ShowBlocked para obtener detalles" -ForegroundColor Gray             }         }     }          # Historial de olas     si ($ShowWaves y $state. WaveHistory y $state. WaveHistory.Count -gt 0) {         Write-Host ""         Write-Host "HISTORIAL DE OLAS" -ForegroundColor Yellow         Write-Host ("-" * 40)                  foreach ($wave en $state. WaveHistory) {             Write-Host "Onda $($wave. WaveNumber): " -NoNewline -ForegroundColor Cyan             Write-Host "$($wave. DeviceCount) devices" -NoNewline             Write-Host " - $($wave. StartedAt)" -ForegroundColor Gray         }     }          # Panel más reciente     $latestAggregation = Get-ChildItem -Path $ReportBasePath -Directory -Filter "Aggregation_*" -ErrorAction SilentlyContinue |         Sort-Object Nombre -Descendente |         Select-Object -Primero 1          if ($latestAggregation) {         $dashboard = Get-ChildItem -Path $latestAggregation.FullName -Filter "*Dashboard*.html" -ErrorAction SilentlyContinue |             Select-Object - Primeros 1                  if ($dashboard) {             Write-Host ""             Write-Host "PANEL MÁS RECIENTE" -ForegroundColor Yellow             Write-Host $dashboard. FullName -ForegroundColor Gray                          if ($OpenDashboard) {                 Start-Process $dashboard. Nombre completo             }         }     }          Registro reciente de #     if ($ShowLog) {         $logFile = Get-ChildItem -Path $stateDir -Filter "Orchestrator_*.log" -ErrorAction SilentlyContinue |             nombre Sort-Object -descendente |             Select-Object - Primeros 1                  if ($logFile) {             Write-Host ""             Write-Host "REGISTRO RECIENTE" -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 Amarillo                 } elseif ($_ -match '\[OK\]') {                     Write-Host $_ -ForegroundColor verde                 } elseif ($_ -match '\[WAVE\]') {                     Write-Host $_ -ForegroundColor Cyan                 } else {                     Write-Host $_ -ForegroundColor Gray                 }             }         }     }          Write-Host ""     Write-Host ("-" * 80) -ForegroundColor DarkGray          if (-not $ShowLog -or -not $ShowWaves -or -not $ShowBlocked) {         Write-Host "Opciones: -ShowLog | -ShowWaves | -ShowBlocked | -OpenDashboard | -Watch 30" -ForegroundColor DarkGray     } }

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

if (-not (Test-Path $ReportBasePath)) {     Write-Host "Ruta del informe no encontrada: $ReportBasePath" -ForegroundColor Red     salir 1 }

if ($Watch -gt 0) {     Write-Host "Viendo el estado cada $Watch segundos. Presione Ctrl+C para detenerse". -ForegroundColor Cyan     while ($true) {         Mostrar estado         Start-Sleep -Seconds $Watch     } } else {     Mostrar estado }  

¿Necesita más ayuda?

¿Quiere más opciones?

Explore las ventajas de las suscripciones, examine los cursos de aprendizaje, aprenda a proteger su dispositivo y mucho más.