VAЋNO Ovaj članak koji sadrži ovu probnu skriptu je povučen. Počevši od Ispravki za Windows objavljenih 12. maja 2026. i posle toga, uzorak skripte nalazi se u fascikli %systemroot%\SecureBoot\ExampleRolloutScripts na uređaju.
Kopirajte i nalepite ovu uzorak skripte i izmenite po potrebi za okruženje:
<# . SINOPSIS Omogućava planirani zadatak ažuriranja bezbednog pokretanja.
.DESCRIPTION Ova skripta obezbeđuje planirani zadatak ažuriranja bezbednog pokretanja operativnog sistema Windows (\Microsoft\Windows\PI\Secure-Boot-Update) je omogućen. Ako je onemogućeno, on ga omogućava. Ako je zadatak izbrisan, može ponovo da ga kreira.
.PARAMETER Action Radnja koju treba izvršiti. Važeće vrednosti: provera, omogućavanje, kreiranje - provera: Samo proverite status zadatka - omogućite: (podrazumevano) Omogućite zadatak ako je onemogućen. Ako nedostaje zadatak, traži da ga napravite.- kreiraj: kreirajte zadatak ako on ne postoji
.PARAMETER ComputerName Opcionalno. Niz imena računara za proveru/omogućavanje zadatka.Ako nije navedeno, pokreće se na lokalnom računaru.
.PARAMETER Credential Opcionalno. Akreditivi za daljinski pristup računaru.
.PARAMETER Quiet Sprečava pojavljivanje odziva i automatski daje odgovor Da. Korisno za automatizaciju.
.EXAMPLE .\Enable-SecureBootTask.ps1 # Omogućava status zadatka na lokalnom računaru
.EXAMPLE .\Check-SecureBootScheduledTask.ps1 omogući # Omogućava zadatak ako je onemogućen. Upiti kreirati ako nedostaje.
.EXAMPLE .\Check-SecureBootScheduledTask.ps1 kreiraj # Kreira zadatak ako je izbrisan, a zatim proverava status
.EXAMPLE .\Check-SecureBootScheduledTask.ps1 check -ComputerName "PC1", "PC2" # Proverava zadatak na udaljenim računarima
.NOTES Zahteva administratorske privilegije za omogućavanje ili kreiranje zadatka.Putanja zadatka: \Microsoft\Windows\PI\Secure-Boot-Update Zadatak se pokreće taskhostw.exe svakih 12 sati sa punim privilegijama.#>
[CmdletBinding(SupportsShouldProcess)] param( [Parameter(Position=0)] [ValidateSet('check', 'enable', 'create', '')] [string]$Action = "enable",
[Parameter()] [niska[]]$ComputerName,
[Parameter()] [PSCredential]$Credential,
[Parameter()] [Pseudonim('Sila', 'Tiho')] [switch]$Quiet )
# Convert Action to switches for backward compatibility $Enable = $Action -eq "enable" $Create = $Action -eq 'create'
# Download URL: https://aka.ms/getsecureboot -> "Deployment and Monitoring Samples" # Napomena: Ova skripta se pokreće na krajnjim tačkama kako bi se omogućio zadatak "Bezbedno pokretanje aplikacije".
$TaskPath = "\Microsoft\Windows\PI\" $TaskName = "Secure-Boot-Update"
function Get-SecureBootTaskStatus { [CmdletBinding()] param( [string]$Computer = $env:COMPUTERNAME )
$result = [PSCustomObject]@{ ComputerName = $Computer TaskExists = $false Status zadatka = $null IsEnabled = $false LastRunTime = $null NextRunTime = $null Greška = $null }
try { if ($Computer -eq $env:COMPUTERNAME -ili $Computer -eq "localhost" -ili $Computer -eq ".") { # Koristite schtasks.exe za pouzdanije otkrivanje zadataka $schtasksOutput = schtasks.exe /Query /TN "$TaskPath$TaskName" /FO CSV 2>&1 if ($LASTEXITCODE -ne 0) { # Zadatak nije pronađen nije greška – samo znači da zadatak ne postoji $result. TaskExists = $false return $result } # Raščlani CSV izlaz $taskData = $schtasksOutput | ConvertFrom-Csv ako ($taskData) { $result. TaskExists = $true $result. TaskState = $taskData.Status $result. IsEnabled = ($taskData.Status -eq "Spremno" -ili $taskData.Status -eq "Pokrenuto") # Pokušaj da dobiješ sledeće vreme izvršavanja od podataka ako ($taskData.'Sledeće vreme izvršavanja' i $taskData."Sledeće vreme izvršavanja" -ne "N/A") { pokušajte { $result. NextRunTime = [DateTime]::P arse($taskData.'Next Run Time') } hvatanje { } } } } else { # Udaljeni računar – koristite Invoke-Command sa šeksima $remoteResult = Invoke-Command -ComputerName $Computer -ScriptBlock { param($fullTaskName) $output = schtasks.exe /Query /TN $fullTaskName /FO CSV 2>&1 @{ ExitCode = $LASTEXITCODE Izlaz = $output } } -parametarList "$TaskPath$TaskName" -ErrorAction Stop
if ($remoteResult.ExitCode -ne 0) { # Zadatak nije pronađen nije greška – samo znači da zadatak ne postoji $result. TaskExists = $false povratni $result }
$taskData = $remoteResult.Output | ConvertFrom-Csv ako ($taskData) { $result. TaskExists = $true $result. TaskState = $taskData.Status $result. IsEnabled = ($taskData.Status -eq "Spremno" -ili $taskData.Status -eq "Pokrenuto") } } } uhvatite { $result. Greška = $_. Exception.Message }
return $result }
function New-SecureBootTask { [CmdletBinding(SupportsShouldProcess)] param( [string]$Computer = $env:COMPUTERNAME )
$success = $false $errorMsg = $null
# Task definition - matches the original Windows Secure Boot Update task # Koristi ComHandler sa klasom SBServicing, pokreće se kao LocalSystem $taskXml = @" <?xml version="1.0" encoding="UTF-16"?> <Task version="1.6" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task"> <za registraciju informacija> <datum>.02.2012.-07T16:39:20</Datum> <SecurityDescriptor>O:BAG:BAD:P(A;; OS;;; BA)(A;; OS;;; SY)(A;; FRFX;;; LS)</SecurityDescriptor> <izvora>'$(@%SystemRoot%\system32\TpmTasks.dll,-601)</Source> <>'$(@%SystemRoot%\system32\TpmTasks.dll,-600)</Author> <opis>'$(@%SystemRoot%\system32\TpmTasks.dll,-604)</Description> <URI>\Microsoft\Windows\PI\Secure-Boot-Update</URI> </RegistrationInfo> <principala> <principala="LocalSystem"> <userId>S-1-5-18</UserId> </principal> </Principals> <postavke> <startIfOnBatteries>false</DisallowStartIfOnBatteries> ><0 StopIfGoingOnBatteries>false</StopIfGoingOnBatteries> ><4 ExecutionTimeLimit>PT1H</ExecutionTimeLimit> ><8 MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy> <StartWhenAvailable>true</StartWhenAvailable> <IdleSettings> <StopOnIdleEnd>tačno</StopOnIdleEnd> <RestartOnIdle>false</RestartOnIdle> </IdleSettings> <UseUnifiedSchedulingEngine>true</UseUnifiedSchedulingEngine> </Settings> <okidače> <BootTrigger> <odlaganje>PT5M</Odlaganje> <ponavljanja> <intervala>PT12H</Interval> </ponavljanje> </BootTrigger> </Triggers> <Kontekst radnji="LocalSystem"> <ComHandler> <ClassId>{5014B7C8-934E-4262-9816-887FA745A6C4}</ClassId> <podatke><! [CDATA[SBServicing]]></Data> </ComHandler> </Actions> </Fascikla> " @
try { if ($Computer -eq $env:COMPUTERNAME -ili $Computer -eq "localhost" -ili $Computer -eq ".") { if ($PSCmdlet.ShouldProcess("$TaskPath$TaskName", "Create scheduled task")) { # Sačuvaj XML u privremenoj datoteci i uvozu $tempFile = [System.IO.Path]::GetTempFileName() $taskXml | Out-File -FilePath $tempFile -Šifrovanje Unikod -Force $output = schtasks.exe /Create /TN "$TaskPath$TaskName" /XML $tempFile /F 2>&1 Remove-Item $tempFile -Force - ErrorAction SilentlyContinue if ($LASTEXITCODE -eq 0) { $success = $true } još { $errorMsg = $output -join " " } } } else { if ($PSCmdlet.ShouldProcess("$Computer\$TaskPath$TaskName", "Create scheduled task")) { $result = Invoke-Command -ComputerName $Computer -ScriptBlock { param($taskPath, $taskName, $xml) $tempFile = [System.IO.Path]::GetTempFileName() $xml | Out-File -FilePath $tempFile -Šifrovanje Unikod -Force $output = schtasks.exe /Create /TN "$taskPath$taskName" /XML $tempFile /F 2>&1 Remove-Item $tempFile -Force -ErrorAction SilentlyContinue @{ ExitCode = $LASTEXITCODE; Izlaz = $output } } -ArgumentLista $TaskPath, $TaskName, $taskXml -Prekid radnje ako ($result. ExitCode -eq 0) { $success = $true } još { $errorMsg = $result. Output - join " } } } } uhvatite { $errorMsg = $_. Exception.Message }
return @{ Uspeh = $success Greška = $errorMsg } }
function Enable-SecureBootTask { [CmdletBinding(SupportsShouldProcess)] param( [string]$Computer = $env:COMPUTERNAME )
$success = $false $errorMsg = $null
try { if ($Computer -eq $env:COMPUTERNAME -ili $Computer -eq "localhost" -ili $Computer -eq ".") { if ($PSCmdlet.ShouldProcess("$TaskPath$TaskName", "Enable scheduled task")) { $output = schtasks.exe /Change /TN "$TaskPath$TaskName" /ENABLE 2>&1 if ($LASTEXITCODE -eq 0) { $success = $true } još { $errorMsg = $output -join " " } } } else { if ($PSCmdlet.ShouldProcess("$Computer\$TaskPath$TaskName", "Enable scheduled task")) { $result = Invoke-Command -ComputerName $Computer -ScriptBlock { param($fullTaskName) $output = schtasks.exe /Change /TN $fullTaskName /ENABLE 2>&1 @{ ExitCode = $LASTEXITCODE; Izlaz = $output } } -parametarList "$TaskPath$TaskName" -ErrorAction Stop ako ($result. ExitCode -eq 0) { $success = $true } još { $errorMsg = $result. Output - join " } } } } uhvatite { $errorMsg = $_. Exception.Message }
return @{ Uspeh = $success Greška = $errorMsg } }
# Main execution Write-Host "" Write-Host "========================================" - Boja prednjeg plana Cijan Write-Host " Enabler za omogućavanje zadatka ažuriranja bezbednog pokretanja" -ForegroundColor Cyan Write-Host "========================================" - Boja prednjeg plana Cijan Write-Host "" Write-Host "Zadatak: $TaskPath$Ime zadatka" - Boja prednjeg plana siva Write-Host ""
# Determine target computers $targets = if ($ComputerName) { $ComputerName } else { @($env:COMPUTERNAME) }
$results = @()
foreach ($computer in $targets) { Write-Host "Provera: $computer" - Boja prednjeg plana žuta $status = Get-SecureBootTaskStatus -Računarski $computer ako ($status. Greška) { Write-Host " Greška: $($status. Greška)" -Boja prednjeg plana Crvena boja } elseif (-not $status. TaskExists) { Write-Host " Zadatak ne postoji u ovom sistemu" - Boja prednjeg plana Crvena boja # Kreirajte ako je zatraženo ili odziv ako je stavka Omogući navedena $shouldCreate = $Create ako (-ne $shouldCreate -a $Enable) { Write-Host "" Write-Host " Zadatak je možda izbrisan". - Boja prednjeg plana – žuta boja ako ($Quiet) { Write-Host " Zadatak automatskog kreiranja (tihi režim)" -Prednji planColor Cyan $shouldCreate = $true } još { $confirm = Read-Host " Želite li da ponovo kreirate zadatak? (Y/N)" if ($confirm -eq 'Y' -or $confirm -eq 'y') { $shouldCreate = $true } } } ako ($shouldCreate) { Write-Host " Kreiranje zadatka..." - Boja prednjeg plana žuta $createResult = New-SecureBootTask -Računarski $computer if ($createResult.Success) { Write-Host " Zadatak je uspešno kreiran" -Boja prednjeg plana – zelena boja prednjeg plana # Ponovo proveri status $status = Get-SecureBootTaskStatus - Računarski $computer ako ($status. TaskExists) { $stateColor = if ($status. IsEnabled) { "Green" } else { "Red" } Write-Host " Država: $($status. TaskState)" -Boja prednjeg plana $stateColor } } else { Write-Host " Kreiranje nije uspelo: $($createResult.Error)" -Crvena boja prednjeg plana } } } else { $stateColor = if ($status. IsEnabled) { "Green" } else { "Red" } Write-Host " Država: $($status. TaskState)" -Boja prednjeg plana $stateColor ako ($status. LastRunTime - i $status. LastRunTime -ne [DateTime]::MinValue) { Write-Host " Poslednji put pokreni: $($status. LastRunTime)" -Boja prednjeg plana siva } ako ($status. NextRunTime - i $status. NextRunTime -ne [DateTime]::MinValue) { Write-Host " Sledeće pokretanje: $($status. NextRunTime)" -Boja prednjeg plana siva }
# Enable if requested and currently disabled ako ($Enable -a -ne $status. IsEnabled) { Write-Host " Omogućavanje zadatka..." -Boja prednjeg plana žuta $enableResult = Enable-SecureBootTask -Računarski $computer if ($enableResult.Success) { Write-Host " Zadatak je uspešno omogućen" - Zelena boja prednjeg plana # Ponovo proveri status $status = Get-SecureBootTaskStatus -Računarski $computer } else { Write-Host " Nije uspelo omogućavanje: $($enableResult.Error)" -Boja prednjeg plana crvene boje } } elseif ($Enable -and $status. IsEnabled) { Write-Host " Zadatak je već omogućen" - Zelena boja prednjeg plana } } $results += $status Write-Host "" }
# Summary Write-Host "========================================" - Boja prednjeg plana Cijan Write-Host " Rezime" - Boja prednjeg plana– cijan Write-Host "========================================" - Boja prednjeg plana Cijan
$enabled = ($results | Where-Object { $_.IsEnabled }).Count $disabled = ($results | Where-Object { $_. TaskExists -a -not $_. IsEnabled }). Raиuna $notFound = ($results | Where-Object { -not $_. TaskExists }). Raиuna $errors = ($results | Where-Object { $_. Greška }). Raиuna
Write-Host "Total Checked: $($results.Count)" Write-Host "Omogućeno: $enabled" - Zelena boja prednjeg plana if ($disabled -gt 0) { Write-Host "Onemogućeno: $disabled" -Boja prednjeg plana Crvena } if ($notFound -gt 0) { Write-Host "Nije pronađeno: $notFound" -Boja prednjeg plana Žuto } if ($errors -gt 0) { Write-Host "Greške: $errors" -Boja prednjeg plana Crvena }
# Return results for pipeline $results