Nukopijuokite ir įklijuokite šį scenarijaus pavyzdį ir modifikuokite, kiek reikia jūsų aplinkai:

<# . ANOTACIJA     Diegia "Secure Boot Rollout Orchestrator" kaip "Windows" suplanuotą užduotį.

.DESCRIPTION     Sukuria suplanuotą užduotį, kuri fone nuolat paleidžia valdymo modulio veikimą.Užduotis vykdoma su apėjimo vykdymo strategija, kad nebūtų rodomi jokie saugos raginimai.     Orkestras:     - Apklausa apie įrenginio naujinimus nurodytu intervalu     - Automatiškai generuoti bangas ir įdiegti GPO     - Tęsti, kol bus atnaujinti      visi tinkami įrenginiai     Stebėkite eigą naudodami: Get-SecureBootRolloutStatus.ps1

.PARAMETER AggregationInputPath     UNC kelias į JSON įrenginio duomenis (nuo aptikimo GPO)

.PARAMETER ReportBasePath     Vietinis kelias ataskaitoms ir būsenos failams

.PARAMETER TargetOU     OU susieti GPO (pasirinktinai – numatytosios domeno šaknies reikšmės)

.PARAMETER PollIntervalMinutes     Minučių skaičius tarp būsenos patikrų. Numatytoji reikšmė: 30

.PARAMETER UseWinCS     Naudokite "WinCS" ("Windows" konfigūravimo sistema), o ne AvailableUpdatesPolicy GPO.Įgalinus, įdiegia WinCsFlags.exe suplanuotą užduotį į pabaigos taškus, o ne į registro GPO.

.PARAMETER WinCSKey     "WinCS" saugiosios įkrovos konfigūracijos raktas. Numatytoji reikšmė: F33E0C8E002

.PARAMETER ServiceAccount     Paskyra, kad būtų vykdoma užduotis. Numatytoji reikšmė: SISTEMA     Domeno operacijoms naudokite domeno administravimo tarnybos paskyrą.

.PARAMETER ScriptPath     Kelias į valdymo modulio scenarijų. Numatytoji reikšmė: tas pats aplankas kaip ir šis scenarijus.

.PARAMETER Uninstall     Pašalinti suplanuotą užduotį

.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     # Diegimas naudojant "WinCS" metodą vietoj AvailableUpdatesPolicy     .\Deploy-OrchestratorTask.ps1 -AggregationInputPath "\\server\SecureBootData$" -ReportBasePath "C:\SecureBootReports" - UseWinCS

.EXAMPLE     .\Deploy-OrchestratorTask.ps1 – išdiegti #>

[CmdletBinding()] param(     [Parametras(Privalomas = $false)]     [eilutė]$AggregationInputPath,     [Parametras(Privalomas = $false)]     [eilutė]$ReportBasePath,     [Parametras(Privalomas = $false)]     [eilutė]$TargetOU,     [Parametras(Privalomas = $false)]     [sveikasis skaičius]$PollIntervalMinutes = 30,     [Parametras(Privalomas = $false)]     [jungiklis]$UseWinCS,     [Parametras(Privalomas = $false)]     [eilutė]$WinCSKey = "F33E0C8E002",     [Parametras(Privalomas = $false)]     [eilutė]$ServiceAccount = "SYSTEM",     [Parametras(Privalomas = $false)]     [eilutė]$ScriptPath,     [Parametras(Privalomas = $false)]     [jungiklis]$Uninstall )                                        

$ErrorActionPreference = "Stop" $TaskName = "SecureBoot-Rollout-Orchestrator" $DownloadUrl = "https://aka.ms/getsecureboot" $DownloadSubPage = "Diegimo ir stebėjimo pavyzdžiai"

# ============================================================================ # PRIKLAUSOMYBĖS TIKRINIMAS # ============================================================================

function Test-ScriptDependencies {     <#     . ANOTACIJA         Patikrina, ar yra visi būtini scenarijai.. APRAŠYMAS / KONTROLĖ         Tikrina, ar yra būtinų scenarijų priklausomybių, ir pateikia atsisiuntimo instrukcijas, jei jų nėra.#>     param(         [Parametras(Privalomas = $true)]         [eilutė]$ScriptDirectory,                  [Parametras(Privalomas = $true)]         [eilutė[]$RequiredScripts     )          $missingScripts = @()          foreach ($script in $RequiredScripts) {         $scriptPath = Join-Path $ScriptDirectory $script         jei (-not (testo kelias $scriptPath)) {             $missingScripts += $script         }     }          jei ($missingScripts.Count -gt 0) {         Write-Host         Write-Host (=" * 70) – priekinio planopalva raudona         Write-Host " MISSING DEPENDENCIES" -ForegroundColor Red         Write-Host ("=" * 70) – priekinio planopalva raudona         Write-Host         Write-Host "Nerasta šių būtinų scenarijų:" -Priekinio planopalva geltona         foreach ($script in $missingScripts) {             Write-Host " - $script" - Priekinio planopalva balta         }         Write-Host         Write-Host "Atsisiųskite naujausius scenarijus iš:" -ForegroundColor Cyan         Write-Host " URL: $DownloadUrl" -ForegroundColor White         Write-Host " Pereiti į: "$DownloadSubPage" - priekinio planopalva balta         Write-Host         Write-Host "Išskleisti visus scenarijus į tą patį katalogą ir paleisti iš naujo." -Priekinio planopalva Geltona         Write-Host         grąžinimo $false     }          grąžinimo $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)) {     išeiti iš 1 }

# ============================================================================ # IŠDIEGTI # ============================================================================

if ($Uninstall) {     Write-Host     Write-Host "Šalinama suplanuota užduotis: $TaskName" – geltona priekinio plano spalva     $existingTask = Get-ScheduledTask -TaskName $TaskName -ErrorAction SilentlyContinue     jei ($existingTask) {         Stop-ScheduledTask –TaskName $TaskName -ErrorAction SilentlyContinue         Unregister-ScheduledTask -TaskName $TaskName -Confirm:$false         Write-Host "Užduotis sėkmingai pašalinta". -Priekinio planopalva žalia     } dar {         Write-Host "Užduotis nerasta". -Priekinio planopalva pilka     }     išeiti iš 0 }     

# ============================================================================ # TIKRINIMAS # ============================================================================

if (-not $AggregationInputPath -or -not $ReportBasePath) {     Write-Host "KLAIDA: -AggregationInputPath ir -ReportBasePath yra būtini." -ForegroundColor Red     Write-Host     Write-Host "Example:" -ForegroundColor Yellow     Write-Host ' .\Deploy-OrchestratorTask.ps1 -AggregationInputPath "\\server\SecureBootData$" -ReportBasePath "C:\SecureBootReports"'     išeiti iš 1 }

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

if (-not (Test-Path $ScriptPath)) {     Write-Host "KLAIDA: valdymo modulio scenarijus nerastas: $ScriptPath" -ForegroundColor Red     išeiti iš 1 }

# Find aggregation script (needed by orchestrator) $aggregateScript = Join-Path $PSScriptRoot "Aggregate-SecureBootData.ps1" jei (-not (testo kelias $aggregateScript)) {     Write-Host "ĮSPĖJIMAS: Aggregate-SecureBootData.ps1 nerasta scenarijų kataloge" -Priekinio planopalva Geltona     Write-Host " Orchestrator gali nepavykti, jei nepavyksta rasti šio scenarijaus." -ForegroundColor Yellow }

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

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

Write-Host "Configuration:" -ForegroundColor Yellow Write-Host " Užduoties pavadinimas: $TaskName" Write-Host " Orchestrator: $displayScriptPath" Write-Host " Įvesties kelias: $AggregationInputPath" Write-Host " Ataskaitos kelias: $ReportBasePath" Write-Host " Target OU: $(if ($TargetOU) { $TargetOU } else { '(domain root)' })" Write-Host " Apklausos intervalas: $PollIntervalMinutes minutės" Write-Host " Paslaugos abonementas: $ServiceAccount" Write-Host " Diegimo metodas: $(if ($UseWinCS) { "WinCS (WinCsFlags.exe)" } dar { "AvailableUpdatesPolicy (GPO)" })" jei ($UseWinCS) {     Write-Host " WinCS raktas: $WinCSKey" } Write-Host

# ============================================================================ # GPO APTIKIMAS – AUTOMATINIS DIEGIMAS, JEI JO NĖRA # ============================================================================

$CollectionGPOName = "SecureBoot-EventCollection" $deployGpoScript = Join-Path $PSScriptRoot "Deploy-GPO-SecureBootCollection.ps1"

# Check if GroupPolicy module is available jei (Get-Module -ListAvailable -Name GroupPolicy) {     Import-Module GroupPolicy - ErrorAction SilentlyContinue     Write-Host "Tikrinama, ar yra aptikimo GPO..." – geltona priekinio plano spalva     išbandykite {         # Gaukite domeną iš AggregationInputPath (pvz., \\domain\share)         $domainFromPath = jei ($AggregationInputPath -match '^\\\\([^\\]+)\\') {             $matches[1]         } dar {             $env:USERDNSDOMAIN         }         # Patikrinkite, ar GPO yra         $existingGpo = Get-GPO -Name $CollectionGPOName -ErrorAction SilentlyContinue         jei ($existingGpo) {             Write-Host " Rasta aptikimo GPO: $CollectionGPOName" -Priekinio planopalva žalia         } dar {             Write-Host             Write-Host ("=" * 70) – priekinio planopalva geltona             Write-Host " DETECTION GPO NOT FOUND" -ForegroundColor Yellow             Write-Host ("=" * 70) – geltona priekinio plano spalva             Write-Host ""             Write-Host "Nerastas aptikimo GPO "$CollectionGPOName". -Priekinio planopalva geltona             Write-Host "Šis GPO būtinas įrenginio būsenos duomenims rinkti." -Priekinio planopalva Geltona             Write-Host             # Paklauskite vartotojo, ar jis nori įdiegti GPO dabar             Write-Host "Ar norite dabar įdiegti aptikimo GPO?                                          (Y/N)" -ForegroundColor Cyan             $response = skaitymo pagrindinis kompiuteris                          jei ($response -atitinka ^[Yy]) {                 Write-Host                 Write-Host "GPO diegimo paleidimas..." -ForegroundColor Cyan                                 Write-Host                 # GPO diegimo komponavimo versijos parametrai                 $gpoParams = @{                     DomainName = $domainFromPath                     CollectionSharePath = $AggregationInputPath                     ScriptSourcePath = Join-Path $PSScriptRoot "Detect-SecureBootCertUpdateStatus.ps1"                 }                                  jei ($TargetOU) {                     $gpoParams.OUPath = $TargetOU                 } dar {                     # Naudokite AutoDetectOU, kad leistumėte vartotojui pasirinkti                     $gpoParams.AutoDetectOU = $true                 }                                  # Paleiskite GPO diegimo scenarijų                                 & $deployGpoScript @gpoParams                 jei ($LASTEXITCODE -ne 0) {                     Write-Host gali kilti problemų dėl GPO diegimo. Peržiūrėkite aukščiau pateiktą išvestį." -Priekinio planopalva Geltona                     Write-Host "Galite tęsti valdymo modulio diegimą arba paspausti Ctrl + C, kad nutrauktumėte." -Priekinio planopalva Geltona                     Write-Host                     Read-Host "Norėdami tęsti, paspauskite klavišą "Enter"                 } dar {                     Write-Host                     Write-Host "Aptikimo GPO sėkmingai įdiegtas!" -Priekinio planocolor žalia                     Write-Host                 }             } dar {                 Write-Host                 Write-Host "GPO diegimo praleidimas. Valdymo modulis negaus įrenginio duomenų" – "ForegroundColor Yellow"                 Write-Host "kol aptikimo GPO bus įdiegtas rankiniu būdu." -Priekinio planopalva Geltona                 Write-Host                 Write-Host "Norėdami įdiegti aptikimo GPO vėliau, vykdyti:" -ForegroundColor Cyan                 Write-Host ".\Deploy-GPO-SecureBootCollection.ps1 -DomainName '"$domainFromPath'" -AutoDetectOU" -Priekinio planopalva balta                 Write-Host             }         }     } sugauti {         Write-Host " Nepavyksta patikrinti GPO: $($_. Exception.Message)" -ForegroundColor Yellow         Write-Host " Continuing with orchestrator deployment..." -ForegroundColor Gray     } } dar {     Write-Host " GroupPolicy modulis nepasiekiamas – GPO patikros praleidimas" -Priekinio planopalva pilka     Write-Host " Įsitikinkite, kad aptikimo GPO diegiamas atskirai." -Priekinio planopalva pilka }

Write-Host ""

# ============================================================================ # KOMPONAVIMO VERSIJOS ARGUMENTAI # ============================================================================

$arguments = @(     "-NoProfile"     "-ExecutionPolicy Bypass"     -File '"$ScriptPath'"     "-AggregationInputPath ""$AggregationInputPath""     -ReportBasePath $ReportBasePath     "-PollIntervalMinutes $PollIntervalMinutes" )

if ($TargetOU) {     $arguments += "-TargetOU ""$TargetOU"" }

if ($UseWinCS) {     $arguments += "-UseWinCS"     $arguments += "-WinCSKey ""$WinCSKey"" }

$argumentString = $arguments -join " "

# Don't display raw arguments with full paths - it's confusing for published scripts # Užduotis naudos visą kelią viduje

# ============================================================================ # KURTI SUPLANUOTĄ UŽDUOTĮ # ============================================================================

# Check for existing task $existingTask = Get-ScheduledTask -TaskName $TaskName -ErrorAction SilentlyContinue jei ($existingTask) {     Write-Host Užduotis jau yra. Naujinama..." – geltona priekinio plano spalva     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 } dar {     # Raginti įvesti domeno paskyros slaptažodį     Write-Host "Įvesti $ServiceAccount slaptažodį" – geltona priekinio plano spalva     $cred = Get-Credential -UserName $ServiceAccount -Message "Service account credentials for scheduled task"     $principal = New-ScheduledTaskPrincipal -UserId $ServiceAccount -LogonType slaptažodis -RunLevel Highest }

# Task settings $settings = New-ScheduledTaskSettingsSet '     -AllowStartIfOnBatteries     -DontStopIfGoingOnBatteries     -PradžiaKai Galima '     -RunOnlyIfNetworkAvailable     -RestartCount 3 '     -RestartInterval (New-TimeSpan -Minutes 5) '     -ExecutionTimeLimit (New-TimeSpan -Days 30) # Allow long-running

# Register task išbandykite {     if ($ServiceAccount -eq "SYSTEM") {         Register-ScheduledTask -TaskName $TaskName -Action $action -Trigger $trigger -Principal $principal -Settings $settings -Description "Secure Boot Certificate Rollout - Automated GPO deployment"     } dar {         Register-ScheduledTask -TaskName $TaskName -Action $action -Trigger $trigger -Principal $principal -Settings $settings -Description "Secure Boot Certificate Rollout - Automated GPO deployment" -User $ServiceAccount -Password $cred. GetNetworkCredential(). Slaptažodį     }     Write-Host "Suplanuota užduotis sukurta sėkmingai!" -Priekinio planopalva Žalia } sugauti {     Write-Host "Nepavyko sukurti suplanuotos užduoties: $($_. Exception.Message)" -ForegroundColor Red     išeiti iš 1 }

# ============================================================================ # BŪSENOS NUORODOS KŪRIMAS # ============================================================================

$statusScript = Join-Path $PSScriptRoot "Get-SecureBootRolloutStatus.ps1" if (Test-Path $statusScript) {     Write-Host     Write-Host "To check rollout status, run:" -ForegroundColor Yellow     Write-Host . \Get-SecureBootRolloutStatus.ps1 -ReportBasePath $ReportBasePath - ForegroundColor Cyan }

# ============================================================================ # IŠVESTIS # ============================================================================

Write-Host "" Write-Host ("=" * 70) - Priekinio planopalva žalia Write-Host " DEPLOYMENT COMPLETE" -ForegroundColor Green Write-Host ("=" * 70) - Priekinio planopalva žalia Write-Host " Write-Host "Orkestras prasidės maždaug per 1 minutę." -Priekinio planocolor balta Write-Host " Write-Host "MONITORING:" -Priekinio planopalva geltona Write-Host " Peržiūrėti užduoties būseną: Get-ScheduledTask -TaskName '$TaskName' | Select State" Write-Host " View task log: Get-Content '$ReportBasePath\RolloutState\Orchestrator_$(Get-Date -Format 'yyyyMMdd').log' -Tail 50" Write-Host " Peržiūrėti diegimo būseną: Get-Content "$ReportBasePath\RolloutState\RolloutState.json" | ConvertFrom-Json" Write-Host " View dashboard: Start '$ReportBasePath\Aggregation_*\SecureBoot_Dashboard*.html" Write-Host " Sparčioji būsena: .\Get-SecureBootRolloutStatus.ps1 -ReportBasePath "$ReportBasePath"Write-Host Write-Host "MANAGEMENT:" -ForegroundColor Yellow Write-Host " Start manually: Start-ScheduledTask -TaskName '$TaskName'" Write-Host " Stop: Stop-ScheduledTask -TaskName '$TaskName'" Write-Host " Remove: .\Deploy-OrchestratorTask.ps1 -Uninstall" Write-Host  

Reikia daugiau pagalbos?

Norite daugiau parinkčių?

Sužinokite apie prenumeratos pranašumus, peržiūrėkite mokymo kursus, sužinokite, kaip apsaugoti savo įrenginį ir kt.