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 ​​​​​​​

Kas vajate veel abi?

Kas soovite rohkem valikuvariante?

Siin saate tutvuda tellimusega kaasnevate eelistega, sirvida koolituskursusi, õppida seadet kaitsma ja teha veel palju muud.