Device Update for IoT Hub にインポートする更新を準備する
新しい更新を取得して、Device Update for IoT Hub にインポートするために更新を準備する方法について説明します。
前提条件
- Device Update for IoT Hub が有効になっている IoT ハブにアクセスできること。
- Device Update 用にプロビジョニングされている、IoT Hub 内の IoT デバイス (またはシミュレーター)。
- PowerShell 5 以降 (Linux、macOS、Windows のインストールを含む)
- サポートされているブラウザー:
- Microsoft Edge
- Google Chrome
デバイスの更新プログラムを入手する
Device Update を設定し、デバイスをプロビジョニングしたので、これらのデバイスに配置する更新ファイルが必要になります。
OEM (相手先ブランド供給) またはソリューション インテグレーターからデバイスを購入した場合、その組織によって更新ファイルが提供される可能性が高いため、更新プログラムを作成する必要はありません。 OEM またはソリューション インテグレーターに問い合わせて、更新プログラムの入手方法を確認してください。
使用するデバイス用のソフトウェアが組織で既に作成されている場合は、その同じグループによって、そのソフトウェア用の更新プログラムが作成されます。
Device Update for IoT Hub を使用して配置される更新プログラムを作成する場合は、シナリオに応じて、イメージベースまたはパッケージベースの方法のいずれかで開始します。
基本的な Device Update のインポート マニフェストを作成する
更新ファイルを作成したら、インポート マニフェストを作成して更新プログラムを記述します。 基本的なインポートの概念をまだ理解していない場合は、理解しておいてください。 テキスト エディターを使用して、インポート マニフェストの JSON を手動で作成することもできますが、このガイドでは例として PowerShell を使用します。
ヒント
イメージベース、パッケージベース、またはプロキシ更新のチュートリアルをまだ行っていない場合は、試してみてください。 また、これらのチュートリアルで、インポート マニフェスト ファイルのサンプルを参考として見るだけでもかまいません。
PowerShell からローカル クローン内の
Tools/AduCmdlets
に移動します。サンプル パラメーター値 Provider、Name、Version、Properties、Handler、Installed Criteria、Files を実際の値に変更した後に次のコマンドを実行します。 使用できる値の詳細については、スキーマと API の情報のインポートに関する記事を参照してください。 特に、互換性プロパティの同一のセットは、複数のプロバイダーと名前の組み合わせで使用できないことに注意してください。
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process Import-Module ./AduUpdate.psm1 $updateId = New-AduUpdateId -Provider Contoso -Name Toaster -Version 1.0 $compat = New-AduUpdateCompatibility -Properties @{ deviceManufacturer = 'Contoso'; deviceModel = 'Toaster' } $installStep = New-AduInstallationStep -Handler 'microsoft/swupdate:1'-HandlerProperties @{ installedCriteria = '1.0' } -Files 'path to your update file' $update = New-AduImportManifest -UpdateId $updateId -Compatibility $compat -InstallationSteps $installStep # Write the import manifest to a file, ideally next to the update file(s). $update | Out-File "./$($updateId.provider).$($updateId.name).$($updateId.version).importmanifest.json" -Encoding utf8
インポート マニフェストを作成し、更新をインポートする準備ができたら、このページの下部にある [次のステップ] リンクまでスクロールできます。
プロキシ更新用の高度な Device Update インポート マニフェストを作成する
プロキシ更新など、更新が複雑な場合は、複数のインポート マニフェストの作成が必要になることがあります。 前のセクションと同じ PowerShell スクリプトを使用して、複雑な更新のために親と子のインポート マニフェストを作成できます。 次のサンプル パラメーターの値を独自の値に置き換えた後、次のコマンドを実行します。 使用できる値の詳細については、スキーマと API の情報のインポートに関する記事を参照してください。
Import-Module $PSScriptRoot/AduUpdate.psm1 -ErrorAction Stop
# We will use arbitrary files as update payload files.
$childFile = "$env:TEMP/childFile.bin.txt"
$parentFile = "$env:TEMP/parentFile.bin.txt"
"This is a child update payload file." | Out-File $childFile -Force -Encoding utf8
"This is a parent update payload file." | Out-File $parentFile -Force -Encoding utf8
# ------------------------------
# Create a child update
# ------------------------------
Write-Host 'Preparing child update ...'
$microphoneUpdateId = New-AduUpdateId -Provider Contoso -Name Microphone -Version $UpdateVersion
$microphoneCompat = New-AduUpdateCompatibility -DeviceManufacturer Contoso -DeviceModel Microphone
$microphoneInstallStep = New-AduInstallationStep -Handler 'microsoft/swupdate:1' -Files $childFile
$microphoneUpdate = New-AduImportManifest -UpdateId $microphoneUpdateId `
-IsDeployable $false `
-Compatibility $microphoneCompat `
-InstallationSteps $microphoneInstallStep `
-ErrorAction Stop -Verbose:$VerbosePreference
# ------------------------------
# Create another child update
# ------------------------------
Write-Host 'Preparing another child update ...'
$speakerUpdateId = New-AduUpdateId -Provider Contoso -Name Speaker -Version $UpdateVersion
$speakerCompat = New-AduUpdateCompatibility -DeviceManufacturer Contoso -DeviceModel Speaker
$speakerInstallStep = New-AduInstallationStep -Handler 'microsoft/swupdate:1' -Files $childFile
$speakerUpdate = New-AduImportManifest -UpdateId $speakerUpdateId `
-IsDeployable $false `
-Compatibility $speakerCompat `
-InstallationSteps $speakerInstallStep `
-ErrorAction Stop -Verbose:$VerbosePreference
# ------------------------------------------------------------
# Create the parent update which parents the child update above
# ------------------------------------------------------------
Write-Host 'Preparing parent update ...'
$parentUpdateId = New-AduUpdateId -Provider Contoso -Name Toaster -Version $UpdateVersion
$parentCompat = New-AduUpdateCompatibility -DeviceManufacturer Contoso -DeviceModel Toaster
$parentSteps = @()
$parentSteps += New-AduInstallationStep -Handler 'microsoft/script:1' -Files $parentFile -HandlerProperties @{ 'arguments'='--pre'} -Description 'Pre-install script'
$parentSteps += New-AduInstallationStep -UpdateId $microphoneUpdateId -Description 'Microphone Firmware'
$parentSteps += New-AduInstallationStep -UpdateId $speakerUpdateId -Description 'Speaker Firmware'
$parentSteps += New-AduInstallationStep -Handler 'microsoft/script:1' -Files $parentFile -HandlerProperties @{ 'arguments'='--post'} -Description 'Post-install script'
$parentUpdate = New-AduImportManifest -UpdateId $parentUpdateId `
-Compatibility $parentCompat `
-InstallationSteps $parentSteps `
-ErrorAction Stop -Verbose:$VerbosePreference
# ------------------------------------------------------------
# Write all to files
# ------------------------------------------------------------
Write-Host 'Saving manifest and update files ...'
New-Item $Path -ItemType Directory -Force | Out-Null
$microphoneUpdate | Out-File "$Path/$($microphoneUpdateId.Provider).$($microphoneUpdateId.Name).$($microphoneUpdateId.Version).importmanifest.json" -Encoding utf8
$speakerUpdate | Out-File "$Path/$($speakerUpdateId.Provider).$($speakerUpdateId.Name).$($speakerUpdateId.Version).importmanifest.json" -Encoding utf8
$parentUpdate | Out-File "$Path/$($parentUpdateId.Provider).$($parentUpdateId.Name).$($parentUpdateId.Version).importmanifest.json" -Encoding utf8
Copy-Item $parentFile -Destination $Path -Force
Copy-Item $childFile -Destination $Path -Force
Write-Host "Import manifest JSON files saved to $Path" -ForegroundColor Green
Remove-Item $childFile -Force -ErrorAction SilentlyContinue | Out-Null
Remove-Item $parentFile -Force -ErrorAction SilentlyContinue | Out-Null