このサンプル スクリプトをコピーして貼り付け、環境に合わせて必要に応じて変更します。

<# .SYNOPSIS     セキュア ブート更新のスケジュールされたタスクを有効にします。

.DESCRIPTION     このスクリプトにより、Windows Secure Boot Update のスケジュールされたタスク     (\Microsoft\Windows\PI\Secure-Boot-Update) が有効になっています。 無効にした場合は、     これを有効にします。 タスクが削除された場合は、タスクを再作成できます。

.PARAMETER Action     実行するアクション。 有効な値: チェック、有効、作成     - チェック: タスクの状態のみをチェックします     - enable: (既定値) 無効になっている場合はタスクを有効にします。 タスクが見つからない場合は、作成を求めるメッセージが表示されます。- 作成: タスクが存在しない場合は作成します

.PARAMETER ComputerName     オプション。 タスクをチェック/有効にするコンピューター名の配列。指定しない場合は、ローカル コンピューターでを実行します。

.PARAMETER Credential     オプション。 リモート コンピューター アクセスの資格情報。

.PARAMETER Quiet     プロンプトを抑制し、自動的に [はい] と回答します。 自動化に役立ちます。

.EXAMPLE     .\Enable-SecureBootTask.ps1     # ローカル コンピューターでタスクの状態を有効にします

.EXAMPLE     .\Check-SecureBootScheduledTask.ps1 有効にします     # 無効にした場合にタスクを有効にします。 不足している場合は、作成するプロンプト。

.EXAMPLE     .\Check-SecureBootScheduledTask.ps1 create     # タスクが削除された場合にタスクを作成し、その状態を確認します

.EXAMPLE     .\Check-SecureBootScheduledTask.ps1 チェック -ComputerName "PC1","PC2"     # リモート マシン上のタスクを確認します

.NOTES     タスクを有効または作成するには、管理者特権が必要です。タスク パス: \Microsoft\Windows\PI\Secure-Boot-Update     タスクは、昇格された特権で 12 時間ごとに taskhostw.exe 実行されます。#>

[CmdletBinding(SupportsShouldProcess)] param(     [Parameter(Position=0)]     [ValidateSet('チェック', '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         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                 return $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')                     } catch { }                 }             }         }         else {             # リモート コンピューター - schtasks で Invoke-Command を使用します             $remoteResult = Invoke-Command -ComputerName $Computer -ScriptBlock {                 param($fullTaskName)                 $output = /Query /TN $fullTaskName /FO CSV 2>&1 schtasks.exe                 @{                     ExitCode = $LASTEXITCODE                     Output = $output                 }             } -ArgumentList "$TaskPath$TaskName" -ErrorAction Stop

            if ($remoteResult.ExitCode -ne 0) {                 # タスクが見つからないのはエラーではありません。タスクが存在しないことを意味します                 $result。TaskExists = $false                 return $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')             }         }     }     catch {         $result。エラー = $_。Exception.Message     }

    return $result }

function New-SecureBootTask {     [コマンドレットバインド(SupportsShouldProcess)]     param(         [string]$Computer = $env:COMPUTERNAME     )

    $success = $false     $errorMsg = $null

    # Task definition - matches the original Windows Secure Boot Update task     # SbServicing クラスで ComHandler を使用し、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</Date>     <SecurityDescriptor>O:BAG:BAD:P(A;;Fa;;;BA)(A;;Fa;;;SY)(A;;FRFX;;;LS)</SecurityDescriptor>     <ソース>'$(@%SystemRoot%\system32\TpmTasks.dll,-601)</Source>     <Author>'$(@%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>     /Principal> の <   </Principals>   <設定>     <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>     stopIfGoingOnBatteries ><0 false></StopIfGoingOnBatteries>     ><4 ExecutionTimeLimit>PT1H</ExecutionTimeLimit>     ><8 MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>     <StartWhenAvailable>true</StartWhenAvailable>     <IdleSettings>       StopOnIdleEnd <true</StopOnIdleEnd>>       <RestartOnIdle>false</RestartOnIdle>     /IdleSettings> の <     UseUnifiedSchedulingEngine <true></UseUnifiedSchedulingEngine>   /Settings> の <   <トリガー>     <BootTrigger>       PT5M</Delay>>遅延の <       <繰り返し>         PT12H</Interval>><間隔       /繰り返し> の <     /BootTrigger> の <   /Triggers> の <   <Actions Context="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 -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 " "                 }             }         }         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 -Encoding 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                 } else {                     $errorMsg = $result。Output -join " "                 }             }         }     }     catch {         $errorMsg = $_。Exception.Message     }

    return @{         成功 = $success         エラー = $errorMsg     } }

function Enable-SecureBootTask {     [コマンドレットバインド(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                 } else {                     $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;Output = $output }                 } -ArgumentList "$TaskPath$TaskName" -ErrorAction Stop                                  if ($result。ExitCode -eq 0) {                     $success = $true                 } それ以外の {                     $errorMsg = $result。Output -join " "                 }             }         }     }     catch {         $errorMsg = $_。Exception.Message     }

    return @{         成功 = $success         エラー = $errorMsg     } }

# Main execution "" を Write-Host する Write-Host "========================================" -ForegroundColor シアン Write-Host "セキュア ブート更新タスク イネーブラー" -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor シアン "" を 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 "チェック: $computer" -ForegroundColor Yellow          $status = Get-SecureBootTaskStatus -Computer $computer          if ($status。エラー) {         Write-Host " エラー: $($status。エラー)" -ForegroundColor Red     }     elseif (-not $status。TaskExists) {         Write-Host " タスクはこのシステムに存在しません" -ForegroundColor Red                  # 要求された場合は作成し、Enable が指定された場合はプロンプトを表示します         $shouldCreate = $Create         (-not $shouldCreate -and $Enable) {             "" を Write-Host する             Write-Host " タスクが削除されている可能性があります。-ForegroundColor Yellow             if ($Quiet) {                 Write-Host "自動作成タスク (Quiet mode)" -ForegroundColor Cyan                 $shouldCreate = $true             } else {                 $confirm = Read-Host " タスクを再作成しますか? (Y/N)"                 if ($confirm -eq 'Y' -or $confirm -eq 'y') {                     $shouldCreate = $true                 }             }         }         if ($shouldCreate) {             Write-Host "タスクの作成...." -ForegroundColor Yellow             $createResult = New-SecureBootTask -Computer $computer             if ($createResult.Success) {                 Write-Host " タスクが正常に作成されました" -ForegroundColor Green                 # 状態を再チェックします                 $status = Get-SecureBootTaskStatus -Computer $computer                 if ($status。TaskExists) {                     $stateColor = if ($status。IsEnabled) { "Green" } else { "Red" }                     Write-Host " 状態: $($status。TaskState)" -ForegroundColor $stateColor                 }             }             else {                 Write-Host " 作成に失敗しました: $($createResult.Error)" -ForegroundColor Red             }         }     }     else {         $stateColor = if ($status。IsEnabled) { "Green" } else { "Red" }         Write-Host " State: $($status。TaskState)" -ForegroundColor $stateColor         if ($status。LastRunTime -and $status。LastRunTime -ne [DateTime]::MinValue) {             Write-Host " Last Run: $($status。LastRunTime)" -ForegroundColor Gray         }         if ($status。NextRunTime -and $status。NextRunTime -ne [DateTime]::MinValue) {             Write-Host " 次の実行: $($status。NextRunTime)" -ForegroundColor Gray         }                                                

        # Enable if requested and currently disabled         if ($Enable -and -not $status。IsEnabled) {             Write-Host "タスクの有効化...." -ForegroundColor Yellow             $enableResult = Enable-SecureBootTask -Computer $computer             if ($enableResult.Success) {                 Write-Host " タスクが正常に有効になりました" -ForegroundColor Green                 # 状態を再チェックします                 $status = Get-SecureBootTaskStatus -Computer $computer             }             else {                 Write-Host " を有効にできませんでした: $($enableResult.Error)" -ForegroundColor Red             }         }         elseif ($Enable -and $status。IsEnabled) {             Write-Host "タスクは既に有効になっています" -ForegroundColor Green         }     }     $results += $status     "" を Write-Host する }                  

# Summary Write-Host "========================================" -ForegroundColor シアン Write-Host " Summary" -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor シアン

$enabled = ($results | Where-Object { $_.IsEnabled }).Count $disabled = ($results | Where-Object { $_.TaskExists -and -not $_.IsEnabled })。Count $notFound = ($results | Where-Object { -not $_.TaskExists })。Count $errors = ($results | Where-Object { $_.エラー })。カウント

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  

ヘルプを表示

その他のオプションが必要ですか?

サブスクリプションの特典の参照、トレーニング コースの閲覧、デバイスのセキュリティ保護方法などについて説明します。