Kopieer en plak dit voorbeeldscript en wijzig deze indien nodig voor uw omgeving:

<# . SYNOPSIS     Hiermee schakelt u de geplande taak Update voor beveiligd opstarten in.

.DESCRIPTION     Dit script zorgt ervoor dat de geplande taak Windows Secure Boot Update     (\Microsoft\Windows\PI\Secure-Boot-Update) is ingeschakeld. Als dit is uitgeschakeld,     hiermee wordt het ingeschakeld. Als de taak is verwijderd, kan deze opnieuw worden gemaakt.

.PARAMETER Action     De actie die moet worden uitgevoerd. Geldige waarden: controleren, inschakelen, maken     - controleren: alleen de taakstatus controleren     - inschakelen: (standaard) Schakel de taak in als deze is uitgeschakeld. Als de taak ontbreekt, wordt gevraagd om te maken.- maken: de taak maken als deze niet bestaat

.PARAMETER ComputerName     Optionele. Matrix met computernamen om de taak te controleren/in te schakelen.Als dit niet is opgegeven, wordt uitgevoerd op de lokale computer.

.PARAMETER Credential     Optionele. Referenties voor externe computertoegang.

.PARAMETER Quiet     Onderdrukt prompts en antwoordt automatisch Ja. Handig voor automatisering.

.EXAMPLE     .\Enable-SecureBootTask.ps1     # Hiermee schakelt u de taakstatus op de lokale computer in

.EXAMPLE     .\Check-SecureBootScheduledTask.ps1 inschakelen     # Schakelt de taak in als deze is uitgeschakeld. Prompts om te maken als deze ontbreekt.

.EXAMPLE     .\Check-SecureBootScheduledTask.ps1 maken     # Maakt de taak als deze is verwijderd en controleert vervolgens de status ervan

.EXAMPLE     .\Check-SecureBootScheduledTask.ps1 check -ComputerName "PC1", "PC2"     # Controleert de taak op externe machines

.NOTES     Vereist beheerdersbevoegdheden om de taak in te schakelen of te maken.Taakpad: \Microsoft\Windows\PI\Secure-Boot-Update     De taak wordt elke 12 uur taskhostw.exe uitgevoerd met verhoogde bevoegdheden.#>

[CmdletBinding(SupportsShouldProcess)] param(     [Parameter(Position=0)]     [ValidateSet('check', 'enable', 'create', '')]     [string]$Action = 'enable',

    [Parameter()]     [tekenreeks[]]$ComputerName,

    [Parameter()]     [PSCredential]$Credential,

    [Parameter()]     [Alias('Force', 'Silent')]     [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" # Opmerking: dit script wordt uitgevoerd op eindpunten om de taak Update voor beveiligd opstarten in te schakelen.

$TaskPath = "\Microsoft\Windows\PI\" $TaskName = "Secure-Boot-Update"

function Get-SecureBootTaskStatus {     [CmdletBinding()]     param(         [string]$Computer = $env:COMPUTERNAME     )

    $result = [PSCustomObject]@{         ComputerName = $Computer         TaskExists = $false         TaskState = $null         IsEnabled = $false         LastRunTime = $null         NextRunTime = $null         Fout = $null     }

    try {         if ($Computer -eq $env:COMPUTERNAME -or $Computer -eq "localhost" -or $Computer -eq ".") {             # Gebruik schtasks.exe voor betrouwbaardere taakdetectie             $schtasksOutput = schtasks.exe /Query /TN "$TaskPath$TaskName" /FO CSV 2>&1                          if ($LASTEXITCODE -ne 0) {                 # Taak niet gevonden is geen fout - betekent alleen dat de taak niet bestaat                 $result. TaskExists = $false                 $result retourneren             }                          # CSV-uitvoer parseren             $taskData = $schtasksOutput | ConverterenVan-CSV             if ($taskData) {                 $result. TaskExists = $true                 $result. TaskState = $taskData.Status                 $result. IsEnabled = ($taskData.Status -eq 'Ready' -or $taskData.Status -eq 'Running')                                  # Probeer de volgende uitvoeringstijd op te halen uit de gegevens                 if ($taskData.'Volgende uitvoeringstijd' -en $taskData.'Volgende uitvoeringstijd' -ne 'N/B') {                     probeer {                         $result. NextRunTime = [DateTime]::P arse($taskData.'Next Run Time')                     } catch { }                 }             }         }         else {             # Externe computer - gebruik Invoke-Command met schtasks             $remoteResult = Invoke-Command -ComputerName $Computer -ScriptBlock {                 param($fullTaskName)                 $output = schtasks.exe /Query /TN $fullTaskName /FO CSV 2>&1                 @{                     ExitCode = $LASTEXITCODE                     Uitvoer = $output                 }             } -ArgumentList "$TaskPath$TaskName" -ErrorAction Stop

            if ($remoteResult.ExitCode -ne 0) {                 # Taak niet gevonden is geen fout - betekent alleen dat de taak niet bestaat                 $result. TaskExists = $false                 $result retourneren             }

            $taskData = $remoteResult.Output | ConvertFrom-Csv             if ($taskData) {                 $result. TaskExists = $true                 $result. TaskState = $taskData.Status                 $result. IsEnabled = ($taskData.Status -eq 'Ready' -or $taskData.Status -eq 'Running')             }         }     }     catch {         $result. Fout = $_. 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     # Maakt gebruik van ComHandler met SBServicing-klasse, wordt uitgevoerd als LocalSystem     $taskXml = @" <?xml version="1.0" encoding="UTF-16"?> <Task version="1.6" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">   <RegistrationInfo>     <Datum>2012-02-07T16:39:20</Date>     <SecurityDescriptor>O:BAG:BAD:P(A;; FA;;; BA)(A;; FA;;; SY)(A;; FRFX;;; LS)</SecurityDescriptor>     <source>'$(@%SystemRoot%\system32\TpmTasks.dll,-601)</Source>     <Author>'$(@%SystemRoot%\system32\TpmTasks.dll,-600)</Author>     <description>'$(@%SystemRoot%\system32\TpmTasks.dll,-604)</Description>     <URI>\Microsoft\Windows\PI\Secure-Boot-Update</URI>   </RegistrationInfo>   <principals>     <Principal id="LocalSystem">       <UserId>S-1-5-18</UserId>     </Principal>   </Principals>   <instellingen>     <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>     ><0 StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>     ><4 ExecutionTimeLimit>PT1H</ExecutionTimeLimit>     ><8 MultipleInstancesPolicy>IgnoreNieuwe</MultipleInstancesPolicy>     <StartWhenAvailable>true</StartWhenAvailable>     <IdleSettings>       <StopOnIdleEnd>true</StopOnIdleEnd>       <RestartOnIdle>false</RestartOnIdle>     </IdleSettings>     <UseUnifiedSchedulingEngine>true</UseUnifiedSchedulingEngine>   </Instellingen>   <triggers>     <BootTrigger>       <delay>PT5M</Delay>      ><herhaling         <interval>PT12H</Interval>       </Herhaling>     </BootTrigger>   </Triggers>   <Actions Context="LocalSystem">     <ComHandler>       <ClassId>{5014B7C8-934E-4262-9816-887FA745A6C4}</ClassId>       <data><! [CDATA[SBServicing]]></Data>     </ComHandler>   </Acties> </Taak> " @

    try {         if ($Computer -eq $env:COMPUTERNAME -or $Computer -eq "localhost" -or $Computer -eq ".") {             if ($PSCmdlet.ShouldProcess("$TaskPath$TaskName", "Geplande taak maken")) {                 # XML opslaan in tijdelijk bestand en importeren                 $tempFile = [System.IO.Path]::GetTempFileName()                 $taskXml | Out-File -FilePath $tempFile -Encoding Unicode -Force                                  $output = schtasks.exe /Create /TN "$TaskPath$TaskName" /XML $tempFile /F 2>&1                                  Remove-Item $tempFile -Force -ErrorAction Op de achtergrond Doorgaan                                  if ($LASTEXITCODE -eq 0) {                     $success = $true                 } else {                     $errorMsg = $output -join " " "                 }             }         }         else {             if ($PSCmdlet.ShouldProcess("$Computer\$TaskPath$TaskName", "Geplande taak maken")) {                 $result = Invoke-Command -ComputerName $Computer -ScriptBlock {                     param($taskPath; $taskName; $xml)                     $tempFile = [System.IO.Path]::GetTempFileName()                     $xml | Out-File -FilePath $tempFile -Encoding Unicode -Force                     $output = schtasks.exe /Create /TN "$taskPath$taskName" /XML $tempFile /F 2>&1                     Remove-Item $tempFile -Force -ErrorAction SilentlyContinue                     @{ ExitCode = $LASTEXITCODE; Uitvoer = $output }                 } -ArgumentList $TaskPath, $TaskName, $taskXml -ErrorAction Stop                                  if ($result. ExitCode -eq 0) {                     $success = $true                 } else {                     $errorMsg = $result. Uitvoer -join " " "                 }             }         }     }     catch {         $errorMsg = $_. Exception.Message     }

    return @{         Geslaagd = $success         Fout = $errorMsg     } }

function Enable-SecureBootTask {     [CmdletBinding(SupportsShouldProcess)]     param(         [string]$Computer = $env:COMPUTERNAME     )

    $success = $false     $errorMsg = $null

    try {         if ($Computer -eq $env:COMPUTERNAME -or $Computer -eq "localhost" -or $Computer -eq ".") {             if ($PSCmdlet.ShouldProcess("$TaskPath$TaskName", "Geplande taak inschakelen")) {                 $output = schtasks.exe /Change /TN "$TaskPath$TaskName" /ENABLE 2>&1                 if ($LASTEXITCODE -eq 0) {                     $success = $true                 } else {                     $errorMsg = $output -join " "                 }             }         }         else {             if ($PSCmdlet.ShouldProcess("$Computer\$TaskPath$TaskName", "Geplande taak inschakelen")) {                 $result = Invoke-Command -ComputerName $Computer -ScriptBlock {                     param($fullTaskName)                     $output = schtasks.exe /Change /TN $fullTaskName /ENABLE 2>&1                     @{ ExitCode = $LASTEXITCODE; Uitvoer = $output }                 } -ArgumentList "$TaskPath$TaskName" -ErrorAction Stop                                  if ($result. ExitCode -eq 0) {                     $success = $true                 } else {                     $errorMsg = $result. Uitvoer -join " " "                 }             }         }     }     catch {         $errorMsg = $_. Exception.Message     }

    return @{         Geslaagd = $success         Fout = $errorMsg     } }

# Main execution Write-Host "" Write-Host "========================================" -ForegroundColor Cyan Write-Host "Secure Boot Update Task Enabler" -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor Cyan Write-Host "" Write-Host "Task: $TaskPath$TaskName" -ForegroundColor Gray Write-Host ""

# Determine target computers $targets = if ($ComputerName) { $ComputerName } else { @($env:COMPUTERNAME) }

$results = @()

foreach ($computer in $targets) {     Write-Host "Checking: $computer" -ForegroundColor Yellow     $status = Get-SecureBootTaskStatus -Computer $computer     if ($status. Fout) {         Write-Host ' Fout: $($status. Error)" -ForegroundColor Red     }     elseif (-niet $status. TaskExists) {         Write-Host "Taak bestaat niet op dit systeem" -VoorgrondKleur Rood         # Maken indien aangevraagd of vraag of Inschakelen is opgegeven         $shouldCreate = $Create         if (-not $shouldCreate -and $Enable) {             Write-Host ""             Write-Host 'De taak is mogelijk verwijderd.' -ForegroundColor Yellow             if ($Quiet) {                 Write-Host 'Taak automatisch maken (stille modus)' -ForegroundColor Cyan                 $shouldCreate = $true             } else {                 $confirm = Read-Host " Wilt u de taak opnieuw maken?                    (Y/N)"                 if ($confirm -eq 'Y' -of $confirm -eq 'y') {                     $shouldCreate = $true                 }             }         }                  if ($shouldCreate) {             Write-Host " Taak maken..." -VoorgrondKleur Geel             $createResult = New-SecureBootTask -Computer $computer                          if ($createResult.Success) {                 Write-Host 'Taak is gemaakt' -VoorgrondKleur Groen                 # Status opnieuw controleren                 $status = Get-SecureBootTaskStatus -Computer $computer                                  if ($status. TaskExists) {                     $stateColor = if ($status. IsEnabled) { "Green" } else { "Red" }                     Write-Host " Status: $($status. TaskState)" -ForegroundColor $stateColor                 }             }             else {                 Write-Host ' Kan niet maken: $($createResult.Error)' -ForegroundColor Red             }         }     }     else {         $stateColor = if ($status. IsEnabled) { "Green" } else { "Red" }         Write-Host " Status: $($status. TaskState)" -ForegroundColor $stateColor                  if ($status. LastRunTime -en $status. LastRunTime -ne [DateTime]::MinValue) {             Write-Host ' Laatste uitvoering: $($status. LastRunTime)" -ForegroundColor Gray         }         if ($status. NextRunTime -en $status. NextRunTime -ne [DateTime]::MinValue) {             Write-Host " Volgende uitvoering: $($status. NextRunTime)" -ForegroundColor Gray         }

        # Enable if requested and currently disabled         if ($Enable -en -niet $status. IsEnabled) {             Write-Host "Taak inschakelen..." -VoorgrondKleur Geel             $enableResult = Enable-SecureBootTask -Computer $computer             if ($enableResult.Success) {                 Write-Host 'Taak is ingeschakeld' -ForegroundColor Green                 # Status opnieuw controleren                 $status = Get-SecureBootTaskStatus -Computer $computer             }             else {                 Write-Host ' Kan het volgende niet inschakelen: $($enableResult.Error)' -ForegroundColor Red             }         }         elseif ($Enable -en $status. IsEnabled) {             Write-Host 'Taak is al ingeschakeld' -VoorgrondKleur Groen         }     }     $results += $status     Write-Host "" }                  

# Summary Write-Host "========================================" -ForegroundColor Cyan Write-Host "Samenvatting" -ForegroundColor Cyaan Write-Host "========================================" -ForegroundColor Cyan

$enabled = ($results | Where-Object { $_.IsEnabled }).Count $disabled = ($results | Where-Object { $_. TaskExists -en -niet $_. IsEnabled }). Tellen $notFound = ($results | Where-Object { -not $_. TaskExists }). Tellen $errors = ($results | Where-Object { $_. Fout }). Tellen

Write-Host "Total Checked: $($results.Count)" Write-Host "Enabled: $enabled" -ForegroundColor Green if ($disabled -gt 0) { Write-Host "Disabled: $disabled" -ForegroundColor Red } if ($notFound -gt 0) { Write-Host "Not Found: $notFound" -ForegroundColor Yellow } if ($errors -gt 0) { Write-Host "Errors: $errors" -ForegroundColor Red }

# Return results for pipeline $results  

Meer hulp nodig?

Meer opties?

Verken abonnementsvoordelen, blader door trainingscursussen, leer hoe u uw apparaat kunt beveiligen en meer.