Freigeben über


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

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

Voraussetzungen

Abrufen eines Updates für Ihre Geräte

Nachdem Sie nun Geräteupdate eingerichtet und Ihre Geräte bereitgestellt haben, benötigen Sie die Updatedatei(n), die Sie auf diesen Geräten bereitstellen.

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

  • Wenn Ihre Organisation bereits Software für die von Ihnen verwendeten Geräte erstellt, werden die gleichen Gruppen die Updates für diese Software erstellen.

Wenn Sie ein Update erstellen, das mithilfe von Device Update für IoT Hub bereitgestellt werden soll, beginnen Sie je nach Szenario entweder mit dem imagebasierten oder paketbasierten Ansatz.

Erstellen eines grundlegenden Device Update-Importmanifests

Nachdem Sie die Aktualisierungsdateien erstellt haben, erstellen Sie ein Importmanifest, um das Update zu beschreiben. Wenn Sie dies noch nicht getan haben, sollten Sie sich unbedingt mit den grundlegenden Importkonzeptenvertraut machen. Obwohl es möglich ist, ein Importmanifest-JSON manuell mit einem Text-Editor zu erstellen, verwendet dieses Handbuch PowerShell als Beispiel.

Tipp

Probieren Sie die bildbasierten-, paketbasierten- oder Proxy-Update--Tutorials aus, wenn Sie dies noch nicht getan haben. Sie können auch Beispielimportmanifestdateien aus diesen Lernprogrammen zur Referenz anzeigen.

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

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

  3. Führen Sie die folgenden Befehle aus, nachdem Sie die angegebenen Beispiel-Parameterwerte durch Ihre eigenen Werte ersetzt haben: Provider, Name, Version, Properties, Handler, Installed Criteria, Files. Details 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, können Sie, wenn Sie bereit sind, Ihr Update zu importieren, zum Link "Nächste Schritte" unten auf 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 aus dem vorherigen Abschnitt verwenden, um über- und untergeordnete Import-Manifeste für komplexe Updates zu erstellen. Führen Sie die folgenden Befehle aus, nachdem Sie die Beispielparameterwerte durch Eigene ersetzt haben. Details 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