Förbered en uppdatering för import till Enhetsuppdatering för IoT Hub

Lär dig hur du hämtar en ny uppdatering och förbereder uppdateringen för import till Enhetsuppdatering för IoT Hub.

Förutsättningar

Hämta en uppdatering för dina enheter

Nu när du har konfigurerat Enhetsuppdatering och etablerat dina enheter behöver du de uppdateringsfiler som du ska distribuera till dessa enheter.

  • Om du har köpt enheter från en OEM-tillverkare (Original Equipment Manufacturer) eller lösningsintegrerare tillhandahåller den organisationen förmodligen uppdateringsfiler åt dig, utan att du behöver skapa uppdateringarna. Kontakta OEM-tillverkaren eller lösningsintegreraren för att ta reda på hur de gör uppdateringar tillgängliga.

  • Om din organisation redan skapar programvara för de enheter som du använder är det samma grupp som ska skapa uppdateringarna för programvaran.

När du skapar en uppdatering som ska distribueras med enhetsuppdatering för IoT Hub börjar du med antingen den avbildningsbaserade eller paketbaserade metoden beroende på ditt scenario.

Skapa ett grundläggande importmanifest för enhetsuppdatering

När du har dina uppdateringsfiler skapar du ett importmanifest för att beskriva uppdateringen. Om du inte redan har gjort det bör du bekanta dig med de grundläggande importbegreppen. Även om det är möjligt att skapa ett JSON-importmanifest manuellt med hjälp av en textredigerare använder den här guiden PowerShell som exempel.

Tips

Prova självstudierna avbildningsbaserad, paketbaseradeller proxyuppdatering om du inte redan har gjort det. Du kan också bara visa exempel på importmanifestfiler från dessa självstudier som referens.

  1. KlonaAzure/iot-hub-device-updateGit-lagringsplats.

  2. Navigera till Tools/AduCmdlets i din lokala klon från PowerShell.

  3. Kör följande kommandon när du har ersatt följande exempelparametervärden med dina egna: Provider, Namn, Version, Egenskaper, Hanterare, Installerade villkor, Filer. Mer information om vilka värden du kan använda finns i Importera schema och API-information. Tänk särskilt på att samma exakta uppsättning kompatibilitetsegenskaper inte kan användas med fler än en kombination av provider och namn.

    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
    

När du har skapat importmanifestet kan du bläddra till länken Nästa steg längst ned på den här sidan om du är redo att importera uppdateringen.

Skapa ett avancerat importmanifest för enhetsuppdatering för en proxyuppdatering

Om uppdateringen är mer komplex, till exempel en proxyuppdatering, kan du behöva skapa flera importmanifest. Du kan använda samma PowerShell-skript från föregående avsnitt för att skapa föräldra- och barnimportmanifest för komplexa uppdateringar. Kör följande kommandon när du har ersatt exempelparametervärdena med dina egna. Mer information om vilka värden du kan använda finns i Importera schema och API-information.

  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ästa steg