העתק והדבק קובץ Script לדוגמה זה ושנה לפי הצורך עבור הסביבה שלך:

<#מקשים . תקציר     הפיכת המשימה המתוזמנת 'עדכון אתחול מאובטח' לזמין.

.DESCRIPTIONמקשים     קובץ Script זה מבטיח את המשימה המתוזמנת של עדכון האתחול המאובטח של Windows     (\Microsoft\Windows\PI\Secure-Boot-Update) זמין. אם האפשרות אינה זמינה,     הוא הופך אותו לזמין. אם הפעילות נמחקה, היא יכולה ליצור אותה מחדש.

.PARAMETER Actionמקשים     הפעולה לביצוע. ערכים חוקיים: סמן, הפוך לזמין, צור     - לבדוק: בדוק רק את מצב הפעילות     - להפעיל: (ברירת מחדל) הפוך את המשימה לזמינה אם היא אינה זמינה. אם המשימה חסרה, תתבקש ליצור.- ליצור: ליצור את המשימה אם היא לא קיימת

.PARAMETER ComputerNameמקשים     אופציונלי. מערך שמות מחשבים שבו יש לבדוק/להפעיל את המשימה.אם לא צוין, פועל במחשב המקומי.

.PARAMETER Credentialמקשים     אופציונלי. אישורים עבור גישה למחשב מרוחק.

.PARAMETER Quietמקשים     העלם בקשות ותשובות אוטומטיות כן. שימושי לאוטומציה.

.EXAMPLEמקשים     .\Enable-SecureBootTask.ps1     # הופך את מצב המשימה לזמין במחשב המקומי

.EXAMPLEמקשים     .\Check-SecureBootScheduledTask.ps1 לזמין     # הופך את המשימה לזמין אם היא אינה זמינה. הנחיות ליצור אם חסר.

.EXAMPLEמקשים     .\Check-SecureBootScheduledTask.ps1 ליצור     # יצירת הפעילות אם היא נמחקה ולאחר מכן בדיקת המצב שלה

.EXAMPLEמקשים     .\Check-SecureBootScheduledTask.ps1 -ComputerName "PC1", "PC2"     # בודק את המשימה במחשבים מרוחקים

.NOTESמקשים     נדרשות הרשאות מנהל מערכת כדי להפוך את המשימה לזמינה או ליצור אותה.נתיב משימה: \Microsoft\Windows\PI\Secure-Boot-Update     המשימה פועלת taskhostw.exe כל 12 שעות עם הרשאות מלאות.מספר >

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

    [Parameter()]מקשים     [string[]]$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"מקשים # הערה: קובץ Script זה פועל ב נקודות קצה כדי להפוך את המשימה עדכון אתחול מאובטח לזמינה.

$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         שגיאה = $null     }

    try {מקשים         if ($Computer -eq $env:COMPUTERNAME -or $Computer -eq "localhost" -or $Computer -eq ".") {             # השתמש schtasks.exe לזיהוי משימות מהימן יותר             $schtasksOutput = schtasks.exe /Query /TN "$TaskPath$TaskName" /FO CSV 2>&1                          if ($LASTEXITCODE -ne 0) {                 # המשימה לא נמצאה אינה שגיאה - כלומר המשימה אינה קיימת                 $result. TaskExists = $false                 החזר $result             אני לא יכול לעשות את                          # Parse CSV output             $taskData = $schtasksOutput | ConvertFrom-Csv             if ($taskData) {                 $result. TaskExists = $true                 $result. TaskState = $taskData.Status                 $result. IsEnabled = ($taskData.Status -eq 'Ready' -או $taskData.Status -eq 'פועל')                                  # נסה לקבל את זמן הריצה הבא מהנתונים                 if ($taskData.'Next Run Time' -and $taskData.'Next Run Time' -ne 'N/A') {                     נסה את {                         $result. NextRunTime = [DateTime]::P arse($taskData.'Next Run Time')                     } תפוס את { }                 אני לא יכול לעשות את             אני לא יכול לעשות את         אני לא יכול לעשות את         אחרת {             # מחשב מרוחק - השתמש Invoke-Command עם משימות             $remoteResult = Invoke-Command -ComputerName $Computer -ScriptBlock {                 param($fullTaskName)                 $output = schtasks.exe /Query /TN $fullTaskName /FO CSV 2>&1                 תרמה תרמה                     ExitCode = $LASTEXITCODE                     Output = $output                 אני לא יכול לעשות את             } -ArgumentList "$TaskPath$TaskName" -ErrorAction Stop

            if ($remoteResult.ExitCode -ne 0) {מקשים                 # המשימה לא נמצאה אינה שגיאה - כלומר המשימה אינה קיימת                 $result. TaskExists = $false                 החזר $result             }

            $taskData = $remoteResult.Output | ConvertFrom-Csvמקשים             if ($taskData) {                 $result. TaskExists = $true                 $result. TaskState = $taskData.Status                 $result. IsEnabled = ($taskData.Status -eq 'Ready' -או $taskData.Status -eq 'פועל')             אני לא יכול לעשות את         אני לא יכול לעשות את     אני לא יכול לעשות את     לתפוס את {         $result. שגיאה = $_. חריגה.הודעה     }

    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מקשים     # משתמש ב- ComHandler עם מחלקת SBServicing, פועל כ- LocalSystem     $taskXml = @" <?xml version="1.0" encoding="UTF-16"?> <Task version="1.6" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">   <רישום חשבון>     <יום>2012-02-07T16:39:20</תאריך>     <SecurityDescriptor>O:BAG:BAD:P(A;; FA;;; BA)(A;; FA;;; SY)(A;; FRFX;;; LS)</SecurityDescriptor>     <מקור>'$(@%SystemRoot%\system32\TpmTasks.dll,-601)</source>     <מחבר>'$(@%SystemRoot%\system32\TpmTasks.dll,-600)</author>     <תיאור>'$(@%SystemRoot%\system32\TpmTasks.dll,-604)</description>     <URI>\Microsoft\Windows\PI\Secure-Boot-Update</URI>   </RegistrationInfo>   <מנהלים>     <הראשי="LocalSystem">       <UserId>S-1-5-18</UserId>     </מנהל>   </מנהלים>   <הגדרות>     <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>     ><0 StopIfGoingOnBatteries>כוזבת</StopIfGoingOnBatteries>     ><4 ExecutionTimeLimit>PT1H</ExecutionTimeLimit>     ><8 MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>     <התחלהכאת זמינות>true</startכאיל>     <IdleSettings>       <StopOnIdleEnd>True</StopOnIdleEnd>       <RestartOnIdle>False</RestartOnIdle>     </IdleSettings>     <UseUnifiedSchedulingEngine>true</UseUnifiedSchedulingEngine>   </הגדרות>   <מפעילים>     <BootTrigger>       <השהיית>PT5M</השהיית>       <חזרה>         <מרווח זמן>PT12H</interval>       </repetition>     </BootTrigger>   </Triggers>   <הקשר פעולות נוספות="LocalSystem">     <ComHandler>       <ClassId>{5014B7C8-934E-4262-9816-887FA745A6C4}</ClassId>       <נתונים><! [CDATA[SBServicing]]></Data>     </ComHandler>   </Actions> </task> " @

    try {מקשים         if ($Computer -eq $env:COMPUTERNAME -or $Computer -eq "localhost" -or $Computer -eq ".") {             if ($PSCmdlet.ShouldProcess("$TaskPath$TaskName", "Create scheduled task")) {                 # שמור XML בקובץ זמני ויבא                 $tempFile = [System.IO.Path]::GetTempFileName()                 $taskXml | Out-File -FilePath $tempFile -קידוד Unicode -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                 } אחר {                     $errorMsg = $output -join " "                 אני לא יכול לעשות את             אני לא יכול לעשות את         אני לא יכול לעשות את         אחרת {             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 -קידוד Unicode -Force                     $output = schtasks.exe /Create /TN "$taskPath$taskName" /XML $tempFile /F 2>&1                     Remove-Item $tempFile -Force -ErrorAction SilentlyContinue                     @{ ExitCode = $LASTEXITCODE; Output = $output }                 } -ArgumentList $TaskPath, $TaskName, $taskXml -ErrorAction Stop                                  if ($result. ExitCode -eq 0) {                     $success = $true                 } אחר {                     $errorMsg = $result. Output -join " "                 אני לא יכול לעשות את             אני לא יכול לעשות את         אני לא יכול לעשות את     אני לא יכול לעשות את     לתפוס את {         $errorMsg = $_. חריגה.הודעה     }

    return @{מקשים         Success = $success         שגיאה = $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", "Enable scheduled task")) {                 $output = schtasks.exe /Change /TN "$TaskPath$TaskName" /ENABLE 2>&1                 if ($LASTEXITCODE -eq 0) {                     $success = $true                 } אחר {                     $errorMsg = $output -join " "                 אני לא יכול לעשות את             אני לא יכול לעשות את         אני לא יכול לעשות את         אחרת {             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; Output = $output }                 } -ArgumentList "$TaskPath$TaskName" -ErrorAction Stop                                  if ($result. ExitCode -eq 0) {                     $success = $true                 } אחר {                     $errorMsg = $result. Output -join " "                 אני לא יכול לעשות את             אני לא יכול לעשות את         אני לא יכול לעשות את     אני לא יכול לעשות את     לתפוס את {         $errorMsg = $_. חריגה.הודעה     }

    return @{מקשים         Success = $success         שגיאה = $errorMsg     אני לא יכול לעשות את }

# Main executionמקשים Write-Host "" Write-Host "========================================" - תכלת צבע קידמה Write-Host " Secure Boot Update Task Enabler" -ForegroundColor Cyan Write-Host "========================================" - צבע קידמה תכלת Write-Host "" Write-Host "פעילות: $TaskPath$TaskName" -צבע רקע אפור Write-Host ""

# Determine target computersמקשים $targets = if ($ComputerName) { $ComputerName } else { @($env:COMPUTERNAME) }

$results = @()

foreach ($computer in $targets) {מקשים     Write-Host "בודק: $computer" -צבע קידמה צהוב          $status = Get-SecureBootTaskStatus -מחשב $computer          if ($status. שגיאה) {         Write-Host " שגיאה: $($status. Error)" -ForegroundColor Red     אני לא יכול לעשות את     elseif (-not $status. TaskExists) {         Write-Host " המשימה אינה קיימת במערכת זו" -צבע קידמה אדום                  # צור אם התבקש, או הצג בקשה אם האפשרות הפוך לזמין צוינה         $shouldCreate = $Create         if (-not $shouldCreate -and $Enable) {             Write-Host ""             Write-Host " ייתכן שהפעילות נמחקה". -צבע קידמה צהוב             if ($Quiet) {                 Write-Host " יצירה אוטומטית של משימה (מצב שקט)" -צבע קידמה תכלת                 $shouldCreate = $true             } אחר {                 $confirm = Read-Host " האם ברצונך ליצור מחדש את הפעילות? (Y/N)"                 if ($confirm -eq 'Y' -או $confirm -eq 'y') {                     $shouldCreate = $true                 אני לא יכול לעשות את             אני לא יכול לעשות את         אני לא יכול לעשות את                  if ($shouldCreate) {             Write-Host " Creating task..." -ForegroundColor Yellow             $createResult = New-SecureBootTask -מחשב $computer                          if ($createResult.Success) {                 Write-Host " המשימה נוצרה בהצלחה" -צבע קידמה ירוק                 # בדוק מחדש את המצב                 $status = Get-SecureBootTaskStatus -מחשב $computer                                  if ($status. TaskExists) {                     $stateColor = if ($status. IsEnabled) { "ירוק" } אחר { "אדום" }                     Write-Host " מצב: $($status. TaskState)" -צבע קידמה $stateColor                 אני לא יכול לעשות את             אני לא יכול לעשות את             אחרת {                 Write-Host " יצירת: $($createResult.Error)" -צבע קידמה אדום             אני לא יכול לעשות את         אני לא יכול לעשות את     אני לא יכול לעשות את     אחרת {         $stateColor = if ($status. IsEnabled) { "ירוק" } אחר { "אדום" }         Write-Host " מצב: $($status. TaskState)" -צבע קידמה $stateColor                  if ($status. LastRunTime -and $status. LastRunTime -ne [DateTime]::MinValue) {             Write-Host " הפעלה אחרונה: $($status. LastRunTime)" -צבע רקע אפור         אני לא יכול לעשות את         if ($status. NextRunTime - $status. NextRunTime -ne [DateTime]::MinValue) {             Write-Host " Next Run: $($status. NextRunTime)" -קידמה - צבע אפור         }

        # Enable if requested and currently disabledמקשים         if ($Enable -and -not $status. IsEnabled) {             Write-Host " הפיכת פעילות לפעילות..." - צבע קידמה צהוב             $enableResult = Enable-SecureBootTask -מחשב $computer                          if ($enableResult.Success) {                 Write-Host " המשימה הופעלה בהצלחה" -צבע קידמה ירוק                 # בדוק מחדש את המצב                 $status = Get-SecureBootTaskStatus -מחשב $computer             אני לא יכול לעשות את             אחרת {                 Write-Host " לא היתה אפשרות להפוך לזמין: $($enableResult.Error)" -צבע קידמה אדום             אני לא יכול לעשות את         אני לא יכול לעשות את         elseif ($Enable -and $status. IsEnabled) {             Write-Host " פעילות כבר זמינה" -צבע קידמה ירוק         אני לא יכול לעשות את     אני לא יכול לעשות את          $results += $status     Write-Host "" }

# Summaryמקשים Write-Host "========================================" - צבע קידמה תכלת Write-Host " Summary" - תכלת צבע קידמה Write-Host "========================================" - צבע קידמה תכלת

$enabled = ($results | Where-Object { $_.IsEnabled }).Countמקשים $disabled = ($results | Where-Object { $_. TaskExists -and -not $_. IsEnabled }). לסמוך $notFound = ($results | Where-Object { -not $_. TaskExists }). לסמוך $errors = ($results | Where-Object { $_. שגיאה }). לסמוך

Write-Host "Total Checked: $($results.Count)"מקשים Write-Host "זמין: $enabled" -צבע קידמה ירוק 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  

זקוק לעזרה נוספת?

מעוניין באפשרויות נוספות?

גלה את יתרונות המנוי, עיין בקורסי הדרכה, למד כיצד לאבטח את המכשיר שלך ועוד.