คัดลอกและวางสคริปต์ตัวอย่างนี้และปรับเปลี่ยนตามที่จําเป็นสําหรับสภาพแวดล้อมของคุณ:

<# . คําพ้องความหมาย     เปิดใช้งานงานที่กําหนดเวลาการอัปเดตการบูตแบบปลอดภัย

.DESCRIPTION     สคริปต์นี้ช่วยให้แน่ใจว่างานที่กําหนดเวลาการอัปเดตการบูตแบบปลอดภัยของ 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" # หมายเหตุ: สคริปต์นี้ทํางานบนจุดสิ้นสุดเพื่อเปิดใช้งานการอัปเดตการบูตแบบปลอดภัย

$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         เปิดใช้งาน = $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 งาน Exists = $false                 ส่งคืน$result             }                          # แยกวิเคราะห์ผลลัพธ์ CSV             $taskData = $schtasksOutput | ConvertFrom-Csv             if ($taskData) {                 $result TaskExists = $true                 $result TaskState = $taskData.Status                 $result IsEnabled = ($taskData.Status -eq 'Ready' -or $taskData.Status -eq 'Running')                                  # พยายามเรียกใช้งานครั้งถัดไปจากข้อมูล                 if ($taskData.'Next Run Time' -and $taskData.'Next Run Time' -ne 'N/A') {                     ลอง {                         $result NextRunTime = [DateTime]::P arse($taskData.'Next Run Time')                     } จับ { }                 }             }         }         อื่นๆ {             # คอมพิวเตอร์ระยะไกล - ใช้ Invoke-Command กับ schtasks             $remoteResult = Invoke-Command -ComputerName $Computer -ScriptBlock {                 param($fullTaskName)                 $output = schtasks.exe /Query /TN $fullTaskName /FO CSV 2>&1                 @{                     ExitCode = $LASTEXITCODE                     เอาท์พุท = $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' -or $taskData.Status -eq 'Running')             }         }     }     จับ {         $result ข้อผิดพลาด = $_. 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     # ใช้ 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">  >RegistrationInfo ของ <     <วันที่>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)</> ต้นทาง     <ผู้เขียน>'$(@%SystemRoot%\system32\TpmTasks.dll,-600)</Author>     คําอธิบาย <>'$(@%SystemRoot%\system32\TpmTasks.dll,-604)</Description>     <URI>\Microsoft\Windows\PI\Secure-Boot-Update</URI>  ></RegistrationInfo  >หลัก <     <id หลัก="LocalSystem">       <UserId>S-1-5-18</userId>     </> หลัก   </principals>  > การตั้งค่า <     <DisallowStartIfOnBatteries><เท็จ /DisallowStartIfOnBatteries>     ><0 StopIfGoingOnBatteries><เท็จ /StopIfGoingOnBatteries>     ><4 ExecutionTimeLimit>PT1H</ExecutionTimeLimit>     ><8 MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>     <StartWhenAvailable>true</StartWhenAvailable>    >idleSettings <       <stopOnIdleEnd>true</StopOnIdleEnd>       <RestartOnIdle><เท็จ /RestartOnIdle>    ></IdleSettings     <UseUnifiedSchedulingEngine>true</UseUnifiedSchedulingEngine>   </> การตั้งค่า  >ทริกเกอร์ <    >BootTrigger <       <หน่วงเวลา>PT5M</หน่วงเวลา>      >การทําซ้ํา <         ช่วง <>><PT12H /Interval       </>การทําซ้ํา    ></BootTrigger  > </ทริกเกอร์   <Actions Context="LocalSystem">    > <ComHandler       <ClassId>{5014B7C8-934E-4262-9816-887FA745A6C4}</ClassId>      >< ข้อมูล <! [CDATA[SBServicing]]></Data>    ></ComHandler   </แอคชัน> </> งาน " @

    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 -Encoding 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 -Encoding Unicode -Force                     $output = schtasks.exe /Create /TN "$taskPath$taskName" /XML $tempFile /F 2>&1                     Remove-Item $tempFile -Force -ErrorAction SilentlyContinue                     @{ ExitCode = $LASTEXITCODE; เอาท์พุท = $output }                 } -ArgumentList $TaskPath, $TaskName, $taskXml -ErrorAction Stop                                  ถ้า ($result ExitCode -eq 0) {                     $success = $true                 } อื่น {                     $errorMsg = $result Output -join " "                 }             }         }     }     จับ {         $errorMsg = $_. Exception.message     }

    return @{         สําเร็จ = $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 }                 } -ArgumentList "$TaskPath$TaskName" -ErrorAction Stop                                  ถ้า ($result ExitCode -eq 0) {                     $success = $true                 } อื่น {                     $errorMsg = $result Output -join " "                 }             }         }     }     จับ {         $errorMsg = $_. Exception.message     }

    return @{         สําเร็จ = $success         ข้อผิดพลาด = $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 "งาน: $TaskPath$TaskName" -ForegroundColor Gray Write-Host ""

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

$results = @()

foreach ($computer in $targets) {     Write-Host "การตรวจสอบ: $computer" -สีพื้นหน้าสีเหลือง     $status = $computer Get-SecureBootTaskStatus -คอมพิวเตอร์     ถ้า ($status ข้อผิดพลาด) {         Write-Host " ข้อผิดพลาด: $($status Error)" -ForegroundColor Red     }     elseif (-not $status. TaskExists) {         Write-Host " ไม่มีงานอยู่ในระบบนี้" -ForegroundColor Red         # สร้างถ้ามีการร้องขอ หรือพร้อมท์ถ้ามีการระบุ Enable         $shouldCreate = $Create         if (-not $shouldCreate -and $Enable) {             Write-Host ""             Write-Host " งานอาจถูกลบไปแล้ว" -ForegroundColor Yellow             if ($Quiet) {                 Write-Host " สร้างงานโดยอัตโนมัติ (โหมดเงียบ)" -ForegroundColor Cyan                 $shouldCreate = $true             } อื่น {                 $confirm = Read-Host " คุณต้องการสร้างงานใหม่หรือไม่                    (Y/N)"                 if ($confirm -eq 'Y' -or $confirm -eq 'y') {                     $shouldCreate = $true                 }             }         }                  if ($shouldCreate) {             Write-Host " การสร้างงาน..." -ForegroundColor สีเหลือง             $createResult = $computer New-SecureBootTask -คอมพิวเตอร์                          if ($createResult.Success) {                 Write-Host " สร้างงานสําเร็จแล้ว" -ForegroundColor Green                 # ตรวจสอบสถานะอีกครั้ง                 $status = $computer Get-SecureBootTaskStatus -คอมพิวเตอร์                                  ถ้า ($status TaskExists) {                     $stateColor = if ($status. เปิดใช้งานแล้ว) { "สีเขียว" } อื่น { "สีแดง" }                     Write-Host " รัฐ: $($status TaskState)" -$stateColor สีพื้นหน้า                 }             }             อื่นๆ {                 Write-Host " ไม่สามารถสร้าง: $($createResult.Error)" -ForegroundColor Red             }         }     }     อื่นๆ {         $stateColor = if ($status. เปิดใช้งานแล้ว) { "สีเขียว" } อื่น { "สีแดง" }         Write-Host " รัฐ: $($status TaskState)" -$stateColor          สีพื้นหน้า         ถ้า ($status LastRunTime -and $status LastRunTime -ne [DateTime]::MinValue) {             Write-Host " เรียกใช้ครั้งล่าสุด: $($status LastRunTime)" -ForegroundColor Gray         }         ถ้า ($status NextRunTime -and $status NextRunTime -ne [DateTime]::MinValue) {             Write-Host " เรียกใช้ครั้งถัดไป: $($status NextRunTime)" -ForegroundColor Gray         }

        # Enable if requested and currently disabled         ถ้า ($Enable -and -not $status เปิดใช้งานแล้ว) {             Write-Host " การเปิดใช้งานงาน..." -ForegroundColor สีเหลือง             $enableResult = $computer Enable-SecureBootTask -คอมพิวเตอร์             if ($enableResult.Success) {                 Write-Host "เปิดใช้งานเรียบร้อยแล้ว" -ForegroundColor สีเขียว                 # ตรวจสอบสถานะอีกครั้ง                 $status = $computer Get-SecureBootTaskStatus -คอมพิวเตอร์             }             อื่นๆ {                 Write-Host " ไม่สามารถเปิดใช้งาน: $($enableResult.Error)" -ForegroundColor Red             }         }         elseif ($Enable -and $status เปิดใช้งานแล้ว) {             Write-Host " งานถูกเปิดใช้งานแล้ว" -ForegroundColor Green         }     }     $results += $status     Write-Host "" }                  

# Summary Write-Host "========================================" -ForegroundColor Cyan Write-Host " สรุป" -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor Cyan

$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" -ForegroundColor Green if ($disabled -gt 0) { Write-Host "Disabled: $disabled" -ForegroundColor Red } if ($notFound -gt 0) { Write-Host "ไม่พบ: $notFound" -ForegroundColor Yellow } if ($errors -gt 0) { Write-Host "ข้อผิดพลาด: $errors" -ForegroundColor Red }

# Return results for pipeline $results  

ต้องการความช่วยเหลือเพิ่มเติมหรือไม่

ต้องการตัวเลือกเพิ่มเติมหรือไม่

สํารวจสิทธิประโยชน์ของการสมัครใช้งาน เรียกดูหลักสูตรการฝึกอบรม เรียนรู้วิธีการรักษาความปลอดภัยอุปกรณ์ของคุณ และอื่นๆ