Freigeben über


Vorbereiten eines Updates für den Import in Device Update for IoT Hub

Erfahren Sie, wie Sie ein neues Update abrufen und das Update für den Import in Device Update for IoT Hub vorbereiten.

Voraussetzungen

Abrufen eines Updates für Ihre Geräte

Nachdem Sie Device Update eingerichtet und Ihre Geräte bereitgestellt haben, benötigen Sie die Updatedatei(en), die Sie auf diesen Geräten bereitstellen möchten.

  • Wenn Sie Geräte von einem Original Equipment Manufacturer (OEM) oder Lösungsintegrator erworben haben, stellt die entsprechende Organisation höchstwahrscheinlich Updatedateien für Sie bereit, ohne dass Sie die Updates selbst erstellen müssen. Wenden Sie sich an den OEM oder Lösungsintegrator, um zu erfahren, wie Updates verfügbar gemacht werden.

  • Falls Ihre Organisation bereits Software für die von Ihnen verwendeten Geräte erstellt, werden die Updates für diese Software von der zuständigen Gruppe erstellt.

Beginnen Sie beim Erstellen eines Updates mit Device Update for IoT Hub je nach Szenario entweder mit dem imagebasierten oder mit dem paketbasierten Ansatz.

Erstellen eines grundlegenden Device Update-Importmanifests

Sobald Sie über Ihre Updatedateien verfügen, erstellen Sie ein Importmanifest, um das Update zu beschreiben. Wenn Sie es noch nicht getan haben, sollten Sie sich mit den grundlegenden Importkonzepten vertraut machen. Es ist zwar möglich, ein JSON-Importmanifest manuell mithilfe eines Text-Editors zu erstellen, in diesem Leitfaden wird jedoch PowerShell als Beispiel verwendet.

Tipp

Probieren Sie die Tutorials zu imagebasierten, paketbasierten oder Proxyupdates aus, wenn Sie dies noch nicht getan haben. Sie können auch einfach Beispiel-Importmanifestdateien aus diesen Tutorials als Referenz anzeigen.

  1. Git-Repository klonenAzure/iot-hub-device-update.

  2. Navigieren Sie aus PowerShell zu Tools/AduCmdlets in Ihrem lokalen Klon.

  3. Führen Sie die folgenden Befehle aus, nachdem Sie die folgenden Beispielparameterwerte durch Ihre eigenen Werte ersetzt haben: Anbieter, Name, Version, Eigenschaften, Handler, Installierte Kriterien, Dateien. Ausführliche Informationen zu den Werten, die Sie verwenden können, finden Sie unter Importieren von Schema- und API-Informationen. Beachten Sie insbesondere, dass derselbe genaue Satz von Kompatibilitätseigenschaften nicht mit mehreren Anbieter- und Namenskombinationen verwendet werden kann.

    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
    

Nachdem Sie Ihr Importmanifest erstellt haben und bereit sind, Ihr Update zu importieren, können Sie zum Link „Nächste Schritte“ am unteren Rand dieser Seite scrollen.

Erstellen eines erweiterten Device Update-Importmanifests für ein Proxyupdate

Wenn Ihr Update komplexer ist, z. B. ein Proxyupdate, müssen Sie möglicherweise mehrere Importmanifeste erstellen. Sie können dasselbe PowerShell-Skript wie im vorherigen Abschnitt verwenden, um übergeordnete und untergeordnete Importmanifeste für komplexe Updates zu erstellen. Führen Sie die folgenden Befehle aus, nachdem Sie die Beispielparameterwerte durch Ihre eigenen ersetzt haben. Ausführliche Informationen zu den Werten, die Sie verwenden können, finden Sie unter Importieren von Schema- und API-Informationen.

  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

Nächste Schritte