OLULINE Seda näidisskripti sisaldav artikkel on kasutuselt kõrvaldatud. Alates Windowsi värskendustest, mis on välja antud 12. mail 2026 ja pärast seda, asub näidisskript teie seadme kaustas %systemroot%\SecureBoot\ExampleRolloutScripts .
Kopeerige ja kleepige see näidisskript ning muutke seda vastavalt oma keskkonnale.
<# . SÜNOPSIS Juurutab Secure Boot Rollout Orchestratori Windowsi ajastatud toiminguna.
.DESCRIPTION Loob ajastatud toimingu, mis käitab orkestrit pidevalt taustal.Toiming käivitatakse käivituspoliitikast möödumise abil, nii et turbeviipasid ei kuvata. Orkestraator: - Küsitlus seadme värskenduste jaoks määratud intervalliga - Genereeri automaatselt lained ja juuruta GOS-id - Jätkake, kuni kõik sobilikud seadmed on värskendatud Edenemise jälgimine, kasutades: Get-SecureBootRolloutStatus.ps1
.PARAMETER AggregationInputPath UNC tee JSON-seadme andmetesse (tuvastamise GPO kaudu)
.PARAMETER ReportBasePath Aruannete ja olekufailide kohalik tee
.PARAMETER TargetOU OU GOS-ide linkimiseks (valikuline – vaikeväärtused domeeni juurkaustale)
.PARAMETER PollIntervalMinutes Olekukontrollide vahelised minutid. Vaikeväärtus: 30
.PARAMETER UseWinCS Kasutage GPO AvailableUpdatesPolicy asemel WinCS-i (Windows Configuration System).Kui see on lubatud, juurutab WinCsFlags.exe registri GPO asemel lõpp-punktides ajastatud toimingu.
.PARAMETER WinCSKey Secure Booti konfiguratsiooni WinCS-i võti. Vaikesäte: F33E0C8E002
.PARAMETER ServiceAccount Konto tööülesande käivitamiseks. Vaikesäte: SYSTEM Domeenitoimingute jaoks kasutage domeeniadministraatori teenusekontot.
.PARAMETER AllowListPath Faili tee, mis sisaldab hostinimesid, et lubada avaldamine (sihitud/pilootväljaanne).Toetab .txt (üks hostinimi rea kohta) või .csv (veeruga Hostname/ComputerName/Name).Kui see on määratud, kaasatakse väljalaskesse AINULT need seadmed.
.PARAMETER AllowADGroup Lubatud arvutikontosid sisaldava AD turberühma nimi.Näide: "SecureBoot-Pilot-Computers"
.PARAMETER ExclusionListPath Faili tee, mis sisaldab hostinimesid, et välistada avaldamine (VIP/täidesaatev seade).Toetab .txt (üks hostinimi rea kohta) või .csv (veeruga Hostname/ComputerName/Name).
.PARAMETER ExcludeADGroup Välistatavaid arvutikontosid sisaldava AD turberühma nimi.Näide: "VIP-Computers"
.PARAMETER ScriptPath Orkestristsenaariumi tee. Vaikesäte: sama kaust, mis see skript.
.PARAMETER Uninstall Ajastatud toimingu eemaldamine
.EXAMPLE .\Deploy-OrchestratorTask.ps1 -AggregationInputPath "\\server\SecureBootData$" -ReportBasePath "C:\SecureBootReports" -ServiceAccount "DOMEEN\svc_secureboot"
.EXAMPLE .\Deploy-OrchestratorTask.ps1 -AggregationInputPath "\\server\SecureBootData$" -ReportBasePath "C:\SecureBootReports"
.EXAMPLE # Juurutamine WinCS-meetodi abil, mitte AvailableUpdatesPolicy abil .\Deploy-OrchestratorTask.ps1 -AggregationInputPath "\\server\SecureBootData$" -ReportBasePath "C:\SecureBootReports" - UseWinCS
.EXAMPLE .\Deploy-OrchestratorTask.ps1 – desinstallimine #>
[CmdletBinding()] param( [Parameeter(kohustuslik = $false)] [string]$AggregationInputPath, [Parameter(Mandatory = $false)] [string]$ReportBasePath, [Parameter(Mandatory = $false)] [string]$TargetOU, [Parameeter(kohustuslik = $false)] [int]$PollIntervalMinutes = 30, [Parameeter(kohustuslik = $false)] [switch]$UseWinCS, [Parameeter(kohustuslik = $false)] [string]$WinCSKey = "F33E0C8E002", [Parameeter(kohustuslik = $false)] [string]$ServiceAccount = "SYSTEM", [Parameeter(kohustuslik = $false)] [string]$AllowListPath, [Parameeter(kohustuslik = $false)] [string]$AllowADGroup, [Parameeter(kohustuslik = $false)] [string]$ExclusionListPath, [Parameter(Mandatory = $false)] [string]$ExcludeADGroup, [Parameeter(kohustuslik = $false)] [string]$ScriptPath, [Parameter(Mandatory = $false)] [switch]$Uninstall )
$ErrorActionPreference = "Stop" $TaskName = "SecureBoot-Rollout-Orchestrator" $DownloadUrl = "https://aka.ms/getsecureboot" $DownloadSubPage = "Juurutamis- ja seirenäidised"
# ================================================================== # SÕLTUVUSE VALIDEERIMISE# ==================================================================
function Test-ScriptDependencies { <# . SÜNOPSIS Kontrollib, kas kõik nõutavad skriptid on olemas.. KIRJELDUS Kontrollib nõutavaid skriptisõltuvusi ja annab allalaadimisjuhised, kui need puuduvad.#> param( [Parameter(Mandatory = $true)] [string]$ScriptDirectory, [Parameeter(kohustuslik = $true)] [string[]]$RequiredScripts ) $missingScripts = @() foreach ($script in $RequiredScripts) { $scriptPath = Join-Path $ScriptDirectory $script kui (-not (testtee $scriptPath)) { $missingScripts += $script } } if ($missingScripts.Count -gt 0) { Write-Host Write-Host ("=" * 70) -Esiplaanivärvi punane värv Write-Host " PUUDUVAD SÕLTUVUSED" – esiplaanivärvivärv: punane Write-Host ("=" * 70) -Esiplaanivärvi punane värv Write-Host "" Write-Host "Järgmisi nõutavaid skripte ei leitud:" –Esiplaanivärvi kollane foreach ($script in $missingScripts) { Write-Host " - $script" –esiplaanivärv valge } Write-Host Write-Host "Laadige uusimad skriptid alla kohast:" -ForegroundColor Cyan Write-Host " URL: $DownloadUrl" –esiplaanivärv, valge Write-Host " Navigeeri: $DownloadSubPage" – esiplaanivärv valge Write-Host Write-Host "Ekstrakti kõik skriptid samasse kausta ja käivita uuesti." –Esiplaanivärvi kollane Write-Host tagastus $false } tagastus $true }
# Required scripts for orchestrator deployment $requiredScripts = @( "Start-SecureBootRolloutOrchestrator.ps1", "Aggregate-SecureBootData.ps1", "Deploy-GPO-SecureBootCollection.ps1", "Detect-SecureBootCertUpdateStatus.ps1", "Get-SecureBootRolloutStatus.ps1", "Enable-SecureBootUpdateTask.ps1" )
if (-not (Test-ScriptDependencies -ScriptDirectory $PSScriptRoot -RequiredScripts $requiredScripts)) { väljumine 1 }
# ================================================================== # DESINSTALLI# ==================================================================
if ($Uninstall) { Write-Host "" Write-Host "Ajastatud toimingu eemaldamine: $TaskName" – esiplaanivärvi kollane $existingTask = Get-ScheduledTask -TaskName $TaskName -ErrorAction SilentlyContinue if ($existingTask) { Stop-ScheduledTask -TaskName $TaskName -ErrorAction SilentlyContinue Unregister-ScheduledTask -TaskName $TaskName -Confirm:$false Write-Host "Task removed successfully" (Tööülesanne on eemaldatud). – esiplaanivärv: roheline } else { Write-Host "Tööülesannet ei leitud". – esiplaanivärv, hall } väljumine 0 }
# ================================================================== Valideerimise# ==================================================================
if (-not $AggregationInputPath -or -not $ReportBasePath) { Write-Host "TÕRGE: -AggregationInputPath ja -ReportBasePath on nõutavad." -Esiplaanivärv: punane Write-Host "" Write-Host "Example:" -ForegroundColor Yellow Write-Host ' .\Deploy-OrchestratorTask.ps1 -AggregationInputPath "\\server\SecureBootData$" -ReportBasePath "C:\SecureBootReports"" väljumine 1 }
# Find orchestrator script kui (-mitte $ScriptPath) { $ScriptPath = Join-Path $PSScriptRoot "Start-SecureBootRolloutOrchestrator.ps1" }
if (-not (Test-Path $ScriptPath)) { Write-Host "ERROR: Orchestrator script not found: $ScriptPath" -ForegroundColor Red väljumine 1 }
# Find aggregation script (needed by orchestrator) $aggregateScript = Join-Path $PSScriptRoot "Aggregate-SecureBootData.ps1" kui (-not (testtee $aggregateScript)) { Write-Host "WARNING: Aggregate-SecureBootData.ps1 not found in script directory" -ForegroundColor Yellow Write-Host " Orchestrator võib nurjuda, kui seda skripti ei leita." -ForegroundColor Yellow }
Write-Host "" Write-Host ("=" * 70) -Esiplaanivärvi tsüaan Write-Host " Secure Boot Rollout Orchestrator - Task Deployment" -ForegroundColor Cyan Write-Host ("=" * 70) -Esiplaanivärvi tsüaan Write-Host
# For display, show relative paths (script names only) $displayScriptPath = Split-Path $ScriptPath -Leht
Write-Host "Configuration:" -ForegroundColor Yellow Write-Host " Tööülesande nimi: $TaskName" Write-Host " Orchestrator: $displayScriptPath" Write-Host " Sisestustee: $AggregationInputPath" Write-Host " Aruande tee: $ReportBasePath" Write-Host " Target OU: $(if ($TargetOU) { $TargetOU } else { '(domain root)' })" Write-Host " Küsitluse intervall: $PollIntervalMinutes minutit" Write-Host " Teenusekonto: $ServiceAccount" Write-Host " Juurutusmeetod: $(if ($UseWinCS) { "WinCS (WinCsFlags.exe)" } else { "AvailableUpdatesPolicy (GPO)" }) kui ($UseWinCS) { Write-Host " WinCS Key: $WinCSKey" } Write-Host
# ================================================================== # GPO TUVASTAMINE – AUTOMAATNE JUURUTAMINE, KUI# ==================================================================PUUDUB
$CollectionGPOName = "SecureBoot-EventCollection" $deployGpoScript = Join-Path $PSScriptRoot "Deploy-GPO-SecureBootCollection.ps1"
# Check if GroupPolicy module is available if (Get-Module -ListAvailable -Name GroupPolicy) { Import-Module GroupPolicy –ErrorAction SilentlyContinue Write-Host "Checking for Detection GPO..." -ForegroundColor Yellow proovige { # Hankige domeen AggregationInputPathist (nt \\domeen\ühiskasutus) $domainFromPath = if ($AggregationInputPath -match '^\\\\([^\\]+)\\') { $matches[1] } else { $env:USERDNSDOMAIN } # Kontrollige, kas GPO on olemas $existingGpo = Get-GPO -Name $CollectionGPOName -ErrorAction SilentlyContinue kui ($existingGpo) { Write-Host " Tuvastamise GPO leiti: $CollectionGPOName" -ForegroundColor Green } else { Write-Host "" Write-Host ("=" * 70) -Esiplaanikollane Write-Host " DETECTION GPO NOT FOUND" -ForegroundColor Yellow Write-Host ("=" * 70) -Esiplaanivärvi kollane Write-Host Write-Host "Tuvastamist GPO-d $CollectionGPOName ei leitud." – kollane esiplaanivärv Write-Host "See GPO on nõutav seadme olekuandmete kogumiseks". -Esiplaanivärvi kollane Write-Host # Küsi kasutajalt, kas ta soovib GPO kohe juurutada Write-Host "Kas soovite kohe juurutada tuvastamise GPO? (Y/N)" -ForegroundColor Cyan $response = lugemishost if ($response -match '^[Yy]') { Write-Host Write-Host "Launching GPO Deployment..." -ForegroundColor Cyan Write-Host # Järgu parameetrid GPO juurutamiseks $gpoParams = @{ DomainName = $domainFromPath CollectionSharePath = $AggregationInputPath ScriptSourcePath = Join-Path $PSScriptRoot "Detect-SecureBootCertUpdateStatus.ps1" } if ($TargetOU) { $gpoParams.OUPath = $TargetOU } else { # Kasutage funktsiooni AutoDetectOU, et lasta kasutajal valida $gpoParams.AutoDetectOU = $true } # Käivitage GPO juurutamise skript & $deployGpoScript @gpoParams if ($LASTEXITCODE -ne 0) { Write-Host "GPO juurutamisel võis ilmneda probleeme. Vaadake üle ülaltoodud väljund." –Esiplaanivärvikollane Write-Host "Saate jätkata orkestri juurutusega või vajutada katkestamiseks klahvikombinatsiooni Ctrl+C." -Esiplaanivärvikollane Write-Host Read-Host "Jätkamiseks vajutage sisestusklahvi (Enter) } else { Write-Host Write-Host "Tuvastamise GPO on juurutatud!" – esiplaanivärvi roheline värv Write-Host } } else { Write-Host "" Write-Host "GPO juurutuse vahelejätmine. Orkestraator ei võta vastu seadme andmeid" -ForegroundColor Yellow Write-Host "kuni tuvastamise GPO käsitsi juurutamiseni". -Esiplaanivärvi kollane Write-Host "" Write-Host "Tuvastamise GPO juurutamiseks hiljem käivitage:" -ForegroundColor Cyan Write-Host " .\Deploy-GPO-SecureBootCollection.ps1 -DomainName '"$domainFromPath'" -AutoDetectOU" -ForegroundColor White Write-Host } } } püüdmine { Write-Host " GPO-d ei saa otsida: $($_. Exception.Message)" -ForegroundColor Yellow Write-Host " Jätkamine orkestri juurutusega..." -ForegroundColor Gray } } else { Write-Host " GroupPolicy moodul pole saadaval – GPO kontroll jäetakse vahele" -Esiplaanivärv, hall Write-Host " Ensure Detection GPO is deployed eraldi." -ForegroundColor Gray }
Write-Host ""
# ================================================================== ARGUMENTIDE# ==================================================================
$arguments = @( "-NoProfile" "-ExecutionPolicy Bypass" "-File '"$ScriptPath'"" "-AggregationInputPath '"$AggregationInputPath'"" "-ReportBasePath '"$ReportBasePath'"" "-PollIntervalMinutes $PollIntervalMinutes" )
if ($TargetOU) { $arguments += "-TargetOU '"$TargetOU'"" }
if ($UseWinCS) { $arguments += "-UseWinCS" $arguments += "-WinCSKey '"$WinCSKey'"" }
if ($AllowListPath) { $arguments += "-AllowListPath '"$AllowListPath'"" }
if ($AllowADGroup) { $arguments += "-AllowADGroup '"$AllowADGroup'"" }
if ($ExclusionListPath) { $arguments += "-ExclusionListPath '"$ExclusionListPath'"" }
if ($ExcludeADGroup) { $arguments += "-ExcludeADGroup '"$ExcludeADGroup'"" }
$argumentString = $arguments -join " "
# Don't display raw arguments with full paths - it's confusing for published scripts # Tööülesanne kasutab täielikku teed asutusesiseselt
# ================================================================== # AJASTATUD TOIMINGU# ==================================================================LOOMINE
# Check for existing task $existingTask = Get-ScheduledTask -TaskName $TaskName -ErrorAction SilentlyContinue if ($existingTask) { Write-Host "Tööülesanne on juba olemas. Värskendamine..." – esiplaanivärvi kollane värv Stop-ScheduledTask -TaskName $TaskName -ErrorAction SilentlyContinue Unregister-ScheduledTask -TaskName $TaskName -Confirm:$false }
# Create task action $action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument $argumentString -WorkingDirectory $PSScriptRoot
# Create trigger - run once, immediately (orchestrator loops internally) $trigger = New-ScheduledTaskTrigger -üks kord -st (toomiskuupäev). AddMinutes(1)
# Create principal if ($ServiceAccount -eq "SYSTEM") { $principal = New-ScheduledTaskPrincipal -UserId "NT AUTHORITY\SYSTEM" -LogonType ServiceAccount -RunLevel Highest } else { # Normaliseeri kohaliku konto vorming: COMPUTERNAME\User -> User # Register-ScheduledTask ei aktsepteeri kohalike kontode puhul vormingut COMPUTERNAME\User või .\User $taskUser = $ServiceAccount if ($ServiceAccount -match "^$([regex]::Escape($env:COMPUTERNAME))\\(.+)$") { $taskUser = $Matches[1] Write-Host " Märkus. Tuvastati kohalik konto, kus ülesande registreerimiseks kasutatakse $taskUser" – hall esiplaanivärv }
# Prompt for password Write-Host "Enter password for $ServiceAccount" –ForegroundColor Yellow $cred = Get-Credential -UserName $taskUser -Message "Teenusekonto identimisteave ajastatud toimingu jaoks" kui (-mitte $cred) { Write-Host "Mandaadikirje on tühistatud. Katkestamine." –Esiplaanivärvivärv: punane väljumine 1 } $principal = New-ScheduledTaskPrincipal -UserId $taskUser -LogonType Password -RunLevel Highest }
# Task settings $settings = New-ScheduledTaskSettingsSet ' -AllowStartIfOnBatteries ' -DontStopIfGoingOnBatteries ' -StartWhenAvailable ' -RunOnlyIfNetworkAvailable ' -RestartCount 3 ' -RestartInterval (uus ajavahemik -minutites 5) ' -ExecutionTimeLimit (uus-ajavahemik -päevad 30) # Luba pikaajaline töötamine
# Register task proovige { if ($ServiceAccount -eq "SYSTEM") { Register-ScheduledTask -TaskName $TaskName -Action $action -Trigger $trigger -Principal $principal -Settings $settings -Description "Secure Boot Certificate Rollout - Automated GPO deployment" } else { # Kasutage New-ScheduledTask, et manustada subjekt (koos käsuga RunLevel Highest) ülesandeobjektile, # seejärel registreerige parameetriga -InputObject + -User/-Password (eraldi parameetrikomplekt -Principalist) $taskDefinition = New-ScheduledTask -Action $action -Trigger $trigger -Principal $principal -Settings $settings $taskDefinition.Description = "Secure Boot Certificate Rollout - Automaatne GPO juurutamine" # Märkus. Register-ScheduledTask nõuab lihtteksti parooli – SecureStringi ülekoormust pole $netCred = $cred. GetNetworkCredential() Register-ScheduledTask -TaskName $TaskName -InputObject $taskDefinition -User $taskUser -Password $netCred.Password –ErrorAction Stop $netCred = $null } Write-Host "Ajastatud toiming on loodud!" – esiplaanivärv: roheline } püüdmine { Write-Host "Ajastatud toimingu loomine nurjus: $($_. Exception.Message)" -ForegroundColor Red väljumine 1 }
# ================================================================== # CREATE STATUS SHORTCUT# ==================================================================
$statusScript = Join-Path $PSScriptRoot "Get-SecureBootRolloutStatus.ps1" if (testtee $statusScript) { Write-Host Write-Host "Väljalaske oleku vaatamiseks käivitage:" -Esiplaanivärvi kollane Write-Host " .\Get-SecureBootRolloutStatus.ps1 -ReportBasePath '"$ReportBasePath'"" -Esiplaanivärvi tsüaan }
# ================================================================== Väljundi# ==================================================================
Write-Host "" Write-Host ("=" * 70) -Esiplaanivärvi roheline Write-Host " DEPLOYMENT COMPLETE" -ForegroundColor Green Write-Host ("=" * 70) -Esiplaanivärvi rohelineWrite-Host Write-Host "Orkestraator algab umbes 1 minuti pärast." Esiplaanivärvi valgeWrite-Host Write-Host "MONITORING:" - ForegroundColor Yellow Write-Host " Kuva tööülesande olek: Get-ScheduledTask -Teguminimi '$TaskName' | Vali olek" Write-Host " Kuva ülesandelogi: Get-Content '$ReportBasePath\RolloutState\Orchestrator_$(Get-Date -Format 'yyyyMMdd').log' -Tail 50" Write-Host " Kuva avaldamise olek: Get-Content '$ReportBasePath\RolloutState\RolloutState.json' | ConvertFrom-Json" Write-Host " View dashboard: Start '$ReportBasePath\Aggregation_*\SecureBoot_Dashboard*.html'" Write-Host " Kiirolek: .\Get-SecureBootRolloutStatus.ps1 -ReportBasePath '$ReportBasePath''Write-Host Write-Host "MANAGEMENT:" -ForegroundColor Yellow Write-Host "Start manually: Start-ScheduledTask -TaskName '$TaskName'" Write-Host " Stopp: Stop-ScheduledTask -TaskName '$TaskName'" Write-Host "Eemalda: .\Deploy-OrchestratorTask.ps1 -Uninstall"Write-Host