SVARĪGI Šis raksts, kurā ir ietverts šis skripta paraugs, ir novecojis. Sākot ar Windows atjauninājumiem, kas izlaisti 2026. gada 12. maijā un vēlāk, skripta paraugs atrodas jūsu ierīces mapē %systemroot%\SecureBoot\ExampleRolloutScripts .

Nokopējiet un ielīmējiet šo skripta paraugu un modificējiet pēc nepieciešamības savai videi:

<# . KOPSAVILKUMS     Izvieto drošās palaišanas ieviešanas vadības moduli kā Windows ieplānotu uzdevumu.

.DESCRIPTION     Izveido ieplānotu uzdevumu, kas vadības moduli nepārtraukti palaiž fonā.Uzdevums tiek izpildīts ar izpildes politikas apiešanu, tāpēc netiek rādītas drošības uzvednes.     Orķestris:     - Aptauja par ierīces atjauninājumiem norādītajā intervālā     - Automātiski ģenerē viļņus un izvieto GPO     - Turpiniet, līdz ir atjauninātas      visas piemērotās ierīces     Pārraudzīt norisi, izmantojot: Get-SecureBootRolloutStatus.ps1

.PARAMETER AggregationInputPath     UNC ceļš uz JSON ierīces datiem (no noteikšanas GPO)

.PARAMETER ReportBasePath     Atskaišu un stāvokļa failu lokālais ceļš

.PARAMETER TargetOU     OU, lai saistītu GPO (neobligāts — noklusējums ir domēna sakne)

.PARAMETER PollIntervalMinutes     Minūtes starp statusa pārbaudēm. Noklusējums: 30

.PARAMETER UseWinCS     AvailableUpdatesPolicy GPO vietā izmantojiet WinCS (Windows konfigurācijas sistēma).Ja šī opcija ir iespējota, izvieto WinCsFlags.exe ieplānoto uzdevumu galapunktos, nevis reģistra GPO.

.PARAMETER WinCSKey     WinCS atslēga drošas palaišanas konfigurācijai. Noklusējums: F33E0C8E002

.PARAMETER ServiceAccount     kontu, lai izpildītu uzdevumu. Noklusējums: SISTĒMA     Domēna operācijām izmantojiet domēna administratora pakalpojuma kontu.

.PARAMETER AllowListPath     Ceļš uz failu, kurā ir resursdatoru nosaukumi, lai ATĻAUTU ieviešanu (mērķtiecīga/izmēģinājuma ieviešana).Atbalsta .txt (viens resursdatora nosaukums katrā rindā) vai .csv (ar kolonnu Resursdatora nosaukums/Datora nosaukums/nosaukums).Ja tas ir norādīts, ieviešanā tiks iekļautas TIKAI šīs ierīces.

.PARAMETER AllowADGroup     Tās AD drošības grupas nosaukums, kurā ir datora konti, kam piešķirt ALLOW.Piemērs: "SecureBoot-Pilot-Computers"

.PARAMETER ExclusionListPath     Ceļš uz failu, kas satur resursdatoru nosaukumus, kurus IZSLĒGT no izvēršanas (VIP/izpildes ierīces).Atbalsta .txt (viens resursdatora nosaukums katrā rindā) vai .csv (ar kolonnu Resursdatora nosaukums/Datora nosaukums/nosaukums).

.PARAMETER ExcludeADGroup     Tās AD drošības grupas nosaukums, kurā ir iekļauti datoru konti, kas jāizslēdz.Piemērs: "VIP datori"

.PARAMETER ScriptPath     Ceļš uz orķestra skriptu. Noklusējums: tā pati mape kā šajā skriptā.

.PARAMETER Uninstall     Ieplānotā uzdevuma noņemšana

.EXAMPLE     .\Deploy-OrchestratorTask.ps1 -AggregationInputPath "\\server\SecureBootData$" -ReportBasePath "C:\SecureBootReports" -ServiceAccount "DOMAIN\svc_secureboot"

.EXAMPLE     .\Deploy-OrchestratorTask.ps1 -AggregationInputPath "\\server\SecureBootData$" -ReportBasePath "C:\SecureBootReports"

.EXAMPLE     # Izvietošana, izmantojot WinCS metodi, nevis AvailableUpdatesPolicy     .\Deploy-OrchestratorTask.ps1 -AggregationInputPath "\\server\SecureBootData$" -ReportBasePath "C:\SecureBootReports" -UseWinCS

.EXAMPLE     .\Deploy-OrchestratorTask.ps1 — atinstalēt #>

[CmdletBinding()] parametrs(     [Parametrs(obligāts = $false)]     [virkne]$AggregationInputPath,          [Parametrs(obligāts = $false)]     [virkne]$ReportBasePath,          [Parametrs(obligāts = $false)]     [virkne]$TargetOU,          [Parametrs(obligāts = $false)]     [int]$PollIntervalMinutes = 30,          [Parametrs(obligāts = $false)]     [pārslēgt]$UseWinCS,          [Parametrs(obligāts = $false)]     [virkne]$WinCSKey = "F33E0C8E002",          [Parametrs(obligāts = $false)]     [virkne]$ServiceAccount = "SISTĒMA",          [Parametrs(obligāts = $false)]     [virkne]$AllowListPath,          [Parametrs(obligāts = $false)]     [virkne]$AllowADGroup,          [Parametrs(obligāts = $false)]     [virkne]$ExclusionListPath,          [Parametrs(obligāts = $false)]     [virkne]$ExcludeADGroup,          [Parametrs(obligāts = $false)]     [virkne]$ScriptPath,          [Parametrs(obligāts = $false)]     [pārslēgt]$Uninstall )

$ErrorActionPreference = "Stop" $TaskName = "SecureBoot-Rollout-Orchestrator" $DownloadUrl = "https://aka.ms/getsecureboot" $DownloadSubPage = "Deployment and monitoring samples"

# ================================================================== # ATKARĪBAS VALIDĀCIJA# ==================================================================

function Test-ScriptDependencies {     <#     . KOPSAVILKUMS         Pārbauda, vai ir pieejami visi nepieciešamie skripti.. APRAKSTS         Pārbauda nepieciešamās skripta atkarības un sniedz lejupielādes instrukcijas, ja tādas trūkst.#>     parametrs(         [Parametrs(obligāts = $true)]         [virkne]$ScriptDirectory,                  [Parametrs(obligāts = $true)]         [virkne[]]$RequiredScripts     )          $missingScripts = @()          foreach ($script $RequiredScripts) {         $scriptPath = Join-Path $ScriptDirectory $script         if (-not (testa ceļš $scriptPath)) {             $missingScripts += $script         }     }          if ($missingScripts.Count, -gt; 0) {         Write-Host ""         Write-Host ("=" * 70) -Priekšplāna krāsa sarkana         Write-Host " TRŪKSTOŠAS ATKARĪBAS" -Priekšplāna krāsa sarkana         Write-Host ("=" * 70) -Priekšplāna krāsa sarkana         Write-Host ""         Write-Host "Šādi nepieciešamie skripti netika atrasti:" -ForegroundColor dzeltena         foreach ($script $missingScripts) {             Write-Host " - $script" - priekšplāna krāsa balta         }         Write-Host ""         Write-Host "Lūdzu, lejupielādējiet jaunākos skriptus no:" -ForegroundColor Cyan         Write-Host " URL: $DownloadUrl" -ForegroundColor White         Write-Host " Naviģēt uz: '$DownloadSubPage'" -Priekšplāna krāsa balta         Write-Host ""         Write-Host "Izvilkt visus skriptus tajā pašā direktorijā un palaist vēlreiz". -Priekšplāna krāsa dzeltena         Write-Host ""         atgriešanās $false     }          atgriešanās $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)) {     Izeja 1 }

# ================================================================== # ATINSTALĒT# ==================================================================

if ($Uninstall) {     Write-Host ""     Write-Host "Notiek plānotā uzdevuma noņemšana: $TaskName" -ForegroundColor Yellow          $existingTask = Get-ScheduledTask -TaskName $TaskName -ErrorAction SilentlyContinue     Ja ($existingTask) {         Stop-ScheduledTask -TaskName $TaskName -ErrorAction SilentlyContinue         Unregister-ScheduledTask -TaskName $TaskName -Confirm:$false         Write-Host "Uzdevums sekmīgi noņemts." -Priekšplāna krāsa zaļa     } citādi {         Write-Host "Uzdevums nav atrasts". -Priekšplāna krāsa pelēka     }     Iziet 0 }

# ================================================================== # VALIDĀCIJAS# ==================================================================

if (-not $AggregationInputPath -or -not $ReportBasePath) {     Write-Host "ERROR: -AggregationInputPath un -ReportBasePath ir nepieciešami." -ForegroundColor Red     Write-Host ""     Write-Host "Piemērs:" -ForegroundColor Yellow     Write-Host ' .\Deploy-OrchestratorTask.ps1 -AggregationInputPath "\\server\SecureBootData$" -ReportBasePath "C:\SecureBootReports"'     Izeja 1 }

# Find orchestrator script Ja (-not $ScriptPath) {     $ScriptPath = Join-Path $PSScriptRoot "Start-SecureBootRolloutOrchestrator.ps1" }

if (-not (Test-Path $ScriptPath)) {     Write-Host "KĻŪDA: vadības moduļa skripts nav atrasts: $ScriptPath" -ForegroundColor Red     Izeja 1 }

# Find aggregation script (needed by orchestrator) $aggregateScript = Join-Path $PSScriptRoot "Aggregate-SecureBootData.ps1" if (-not (testa ceļš $aggregateScript)) {     Write-Host "BRĪDINĀJUMS: Aggregate-SecureBootData.ps1 nav atrasts skriptu direktorijā" -ForegroundColor Yellow     Write-Host " Orchestrator may fail if it cannot find this script." -ForegroundColor Yellow }

Write-Host "" Write-Host ("=" * 70) -ForegroundColor Cyan Write-Host " Secure Boot Rollout Orchestrator - Task Deployment" - ForegroundColor Cyan Write-Host ("=" * 70) -ForegroundColor Cyan Write-Host ""

# For display, show relative paths (script names only) $displayScriptPath = Split-Path $ScriptPath -Leaf

Write-Host "Configuration:" -ForegroundColor Yellow Write-Host " Uzdevuma nosaukums: $TaskName" Write-Host " Orķestris: $displayScriptPath" Write-Host " Ievades ceļš: $AggregationInputPath" Write-Host " Atskaites ceļš: $ReportBasePath" Write-Host " Mērķis OU: $(if ($TargetOU) { $TargetOU } else { '(domēna sakne)' })" Write-Host " Aptaujas intervāls: $PollIntervalMinutes minūtes" Write-Host " Pakalpojuma konts: $ServiceAccount" Write-Host " Izvietošanas metode: $(if ($UseWinCS) { "WinCS (WinCsFlags.exe)" } else { "AvailableUpdatesPolicy (GPO)" })" Ja ($UseWinCS) {     Write-Host " WinCS atslēga: $WinCSKey" } Write-Host ""

# ================================================================== # GPO NOTEIKŠANA — AUTOMĀTISKA IZVIETOŠANA, JA TRŪKST# ==================================================================

$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 "Pārbauda, vai nav noteikta GPO..." -ForegroundColor Yellow          Izmēģiniet {         # Iegūstiet domēnu no AggregationInputPath (piem., \\domain\share)         $domainFromPath = IF ($AggregationInputPath -match '^\\\\([^\\]+)\\') {             $matches[1]         } citādi {             $env:USERDNSDOMAIN         }                  # Pārbaudiet, vai pastāv GPO         $existingGpo = get-GPO -name $CollectionGPOName -ErrorAction SilentlyContinue                  Ja ($existingGpo) {             Write-Host " Atrasts noteikšanas GPO: $CollectionGPOName" -ForegroundColor Green         } citādi {             Write-Host ""             Write-Host ("=" * 70) -ForegroundColor dzeltena             Write-Host " NOTEIKŠANA GPO NAV ATRASTA" -priekšplāna krāsa dzeltena             Write-Host ("=" * 70) -priekšplāna krāsa dzeltena             Write-Host ""             Write-Host "Noteikšanas GPO $CollectionGPOName netika atrasts." -Priekšplāna krāsa dzeltena             Write-Host "Šis GPO ir nepieciešams, lai apkopotu ierīces statusa datus." -ForegroundColor dzeltena             Write-Host ""                          # Pajautāt lietotājam, vai viņš vēlas izvietot GPO tūlīt             Write-Host "Vai vēlaties izvietot atklāšanas GPO tūlīt?" (J/N)" -ForegroundColor Cyan             $response = lasīšanas resursdators                          if ($response -match '^[Yy]') {                 Write-Host ""                 Write-Host "Launching GPO Deployment..." -ForegroundColor Cyan                 Write-Host ""                                  # Būvējuma parametri GPO izvietošanai                 $gpoParams = @{                     Domēna nosaukums = $domainFromPath                     CollectionSharePath = $AggregationInputPath                     ScriptSourcePath = Join-Path $PSScriptRoot "Detect-SecureBootCertUpdateStatus.ps1"                 }                                  Ja ($TargetOU) {                     $gpoParams.OUPath = $TargetOU                 } citādi {                     # Izmantojiet AutoDetectOU, lai ļautu lietotājam atlasīt                     $gpoParams.AutoDetectOU = $true                 }                                  # Palaist GPO izvietošanas skriptu                 & $deployGpoScript @gpoParams                                  IF ($LASTEXITCODE -ne 0) {                     Write-Host "Iespējams, radušās problēmas saistībā ar GPO izvietošanu. Pārskatiet iepriekš norādīto rezultātu." -ForegroundColor Yellow                     Write-Host "Varat turpināt ar vadības moduļa izvietošanu vai nospiest taustiņu kombināciju Ctrl+C, lai pārtrauktu." -Priekšplāna krāsa dzeltena                     Write-Host ""                     Read-Host "Press Enter to continue" (Nospiediet taustiņu Enter, lai turpinātu)                 } citādi {                     Write-Host ""                     Write-Host "Detection GPO deployed successfully!" -ForegroundColor Green                     Write-Host ""                 }             } citādi {                 Write-Host ""                 Write-Host "GPO izvietošanas izlaišana. Vadības modulis nesaņems ierīces datus" -ForegroundColor Yellow                 Write-Host "līdz atklāšanas GPO tiek izvietots manuāli". -ForegroundColor Yellow                 Write-Host ""                 Write-Host "Lai vēlāk izvietotu atklāšanas GPO, palaidiet:" -ForegroundColor Cyan                 Write-Host " .\Deploy-GPO-SecureBootCollection.ps1 -DomainName '"$domainFromPath'" -AutoDetectOU" -ForegroundColor White                 Write-Host ""             }         }     } noķert {         Write-Host " Nevar pārbaudīt GPO: $($_. Exception.Message)" -ForegroundColor Yellow         Write-Host " Turpināt ar orķestra izvietošanu..." -ForegroundColor Grey     } } citādi {     Write-Host " GroupPolicy modulis nav pieejams — tiek izlaista GPO pārbaude" -ForegroundColor Grey     Write-Host " Pārliecinieties, ka noteikšanas GPO tiek izvietots atsevišķi." -Priekšplāna krāsa pelēka }

Write-Host ""

# ================================================================== # BUILD ARGUMENTS# ==================================================================

$arguments = @(     "-NoProfile"     "-ExecutionPolicy apvedceļš"     "-Fails '"$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 # Uzdevuma iekšēji tiks izmantots pilns ceļš

# ================================================================== # IEPLĀNOTO UZDEVUMU# ==================================================================IZVEIDE

# Check for existing task $existingTask = Get-ScheduledTask -TaskName $TaskName -ErrorAction SilentlyContinue Ja ($existingTask) {     Write-Host "Uzdevums jau pastāv. Atjaunināšana..." -Priekšplāna krāsa dzeltena     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 -Once -At (get-date). AddMinutes(1)

# Create principal if ($ServiceAccount -eq "SYSTEM") {     $principal = New-ScheduledTaskPrincipal -UserId "NT AUTHORITY\SYSTEM" -LogonType ServiceAccount -RunLevel highest } citādi {     # Normalizējiet lokālā konta formātu: COMPUTERNAME\User -> User     # Register-ScheduledTask nepieņem COMPUTERNAME\User vai .\User lokālajiem kontiem     $taskUser = $ServiceAccount     if ($ServiceAccount -match "^$([regex]::Escape($env:COMPUTERNAME))\\(.+)$") {         $taskUser = $Matches[1]         Write-Host " Note: Local account detected using '$taskUser' for task registration" -ForegroundColor Grey     }

    # Prompt for password     Write-Host "Ievadiet $ServiceAccount paroli" -ForegroundColor Yellow     $cred = Get-Credential -UserName $taskUser -Message "Service account credentials for scheduled task"     Ja (-not $cred) {         Write-Host "Akreditācijas datu ievadne ir atcelta. Notiek aborts." -Priekšplāna krāsa sarkana         Izeja 1     }     $principal = New-ScheduledTaskPrincipal -UserId $taskUser -LogonType parole -RunLevel highest }

# Task settings $settings = New-ScheduledTaskSettingsSet '     -AllowStartIfOnBatteries '     -DontStopIfGoingOnBatteries '     -StartWhenAvailable '     -RunOnlyIfNetworkAvailable '     -RestartCount 3 '     -RestartInterval (New-TimeSpan -Minutes 5) '     -ExecutionTimeLimit (New-TimeSpan -Days 30) # Atļaut ilgtermiņu

# Register task Izmēģiniet {     if ($ServiceAccount -eq "SYSTEM") {         Register-ScheduledTask -TaskName $TaskName -Action $action -Trigger $trigger -Principal $principal -Settings $settings -Description "Drošās palaišanas sertifikāta ieviešana — automātiska GPO izvietošana"     } citādi {         # Izmantojiet New-ScheduledTask, lai iegultu galveno (ar RunLevel Highest) uzdevuma objektā,         # pēc tam reģistrējieties ar -InputObject + -User/-Password (atsevišķs parametru komplekts no -Principal)         $taskDefinition = New-ScheduledTask -Action $action -Trigger $trigger -Principal $principal -Settings $settings         $taskDefinition.Description = "Secure Boot Certificate Rollout — Automated GPO deployment"         # Piezīme: Register-ScheduledTask nepieciešama vienkārša teksta parole - nepastāv SecureString pārslodze         $netCred = $cred. GetNetworkCredential()         Register-ScheduledTask -TaskName $TaskName -InputObject $taskDefinition -User $taskUser -Password $netCred.Password -ErrorAction Stop         $netCred = $null     }     Write-Host "Ieplānotais uzdevums veiksmīgi izveidots!" -Priekšplāna krāsa zaļa } noķert {     Write-Host "Neizdevās izveidot ieplānoto uzdevumu: $($_. Exception.Message)" -ForegroundColor Red     Izeja 1 }

# ================================================================== # CREATE STATUS SHORTCUT# ==================================================================

$statusScript = Join-Path $PSScriptRoot "Get-SecureBootRolloutStatus.ps1" ja (testa ceļš $statusScript) {     Write-Host ""     Write-Host "Lai pārbaudītu izvēršanas statusu, palaist:" -ForegroundColor Yellow     Write-Host " .\Get-SecureBootRolloutStatus.ps1 -ReportBasePath '"$ReportBasePath'"" -ForegroundColor Cyan }

# ================================================================== # IZVADES# ==================================================================

Write-Host "" Write-Host ("=" * 70) -Priekšplāna krāsa zaļa Write-Host " IZVIETOŠANA PABEIGTA" -Priekšplāna krāsa zaļa Write-Host ("=" * 70) -Priekšplāna krāsa zaļa Write-Host "" Write-Host "Orkestrators sāks darboties aptuveni pēc 1 minūtes." -Priekšplāna krāsa balta Write-Host "" Write-Host "MONITORING:" -ForegroundColor Yellow Write-Host " Skatīt uzdevuma statusu: Get-ScheduledTask -TaskName '$TaskName' | Atlasīt štatu" Write-Host " Skatīt uzdevumu žurnālu: Get-Content '$ReportBasePath\RolloutState\Orchestrator_$(Get-Date -Format 'yyyyMMdd').log' -Tail 50" Write-Host " Skatīt izvēršanas stāvokli: Get-Content '$ReportBasePath\RolloutState\RolloutState.json' | ConvertFrom-Json" Write-Host " Skatīt informācijas paneli: sākums '$ReportBasePath\Aggregation_*\SecureBoot_Dashboard*.html'" Write-Host " Ātrais statuss: .\Get-SecureBootRolloutStatus.ps1 -ReportBasePath '$ReportBasePath'" Write-Host "" Write-Host "PĀRVALDĪBA:" -Priekšplāna krāsa dzeltena Write-Host " Sākt manuāli: Start-ScheduledTask -TaskName '$TaskName'" Write-Host " Stop: Stop-ScheduledTask -TaskName '$TaskName'" Write-Host " Remove: .\Deploy-OrchestratorTask.ps1 -Uninstall" Write-Host "" ​​​​​​​

Nepieciešama papildu palīdzība?

Vēlaties vairāk opciju?

Izpētiet abonementa priekšrocības, pārlūkojiet apmācības kursus, uzziniet, kā aizsargāt ierīci un veikt citas darbības.