新しい更新プログラムを取得し、Device Update for IoT Hub にインポートするための更新プログラムを準備する方法について説明します。
前提条件
- Device Update for IoT Hub が有効になっている IoT Hub へのアクセス。
- IoT Hub 内の Device Update 用にプロビジョニングされた IoT デバイス (またはシミュレーター)。
- PowerShell 5 以降 (Linux、macOS、Windows のインストールを含む)
- サポートされているブラウザー:
- Microsoft Edge
- Google Chrome
デバイスの更新プログラムを取得する
Device Update を設定し、デバイスをプロビジョニングしたので、それらのデバイスに展開する更新ファイルが必要になります。
OEM (Original Equipment Manufacturer) またはソリューション インテグレーターからデバイスを購入した場合、更新プログラムを作成しなくても、その組織が更新ファイルを提供する可能性が最も高くなります。 OEM またはソリューション インテグレーターに問い合わせて、更新プログラムの入手方法を確認してください。
使用するデバイスのソフトウェアを組織が既に作成している場合、その同じグループがそのソフトウェアの更新プログラムを作成するグループになります。
Device Update for IoT Hub を使用してデプロイする更新プログラムを作成する場合は、シナリオに応じて 、イメージベースまたはパッケージベースのアプローチ から始めます。
基本的な Device Update のインポート マニフェストを作成する
更新ファイルを作成したら、更新プログラムを記述するインポート マニフェストを作成します。 まだ行っていない場合は、基本的な インポートの概念を理解しておいてください。 テキスト エディターを使用してインポート マニフェスト JSON を手動で作成することもできますが、このガイドでは PowerShell を例として使用します。
ヒント
まだ行っていない場合は、 イメージベース、 パッケージベース、または プロキシ更新 のチュートリアルをお試しください。 これらのチュートリアルのサンプル インポート マニフェスト ファイルを参照用に表示することもできます。
Git リポジトリを複製する
Azure/iot-hub-device-update
。PowerShell からローカルクローンの
Tools/AduCmdlets
に移動します。次のサンプル パラメーター値を独自のパラメーター値に置き換えた後、次のコマンドを実行します: プロバイダー、名前、バージョン、プロパティ、ハンドラー、インストール済み抽出条件、ファイル。 使用できる値の詳細については、「 スキーマと 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