Delen via


Een update voorbereiden om te importeren in Device Update voor IoT Hub

Meer informatie over het verkrijgen van een nieuwe update en het voorbereiden van de update voor het importeren in Device Update voor IoT Hub.

Vereisten

Een update voor uw apparaten verkrijgen

Nu u Device Update hebt ingesteld en uw apparaten hebt ingericht, hebt u de updatebestanden nodig die u op die apparaten gaat implementeren.

  • Als u apparaten hebt gekocht bij een OEM (Original Equipment Manufacturer) of oplossingsintegrator, levert die organisatie waarschijnlijk updatebestanden voor u, zonder dat u de updates hoeft te maken. Neem contact op met de OEM- of oplossingsintegrator om erachter te komen hoe ze updates beschikbaar maken.

  • Als uw organisatie al software maakt voor de apparaten die u gebruikt, is diezelfde groep degene die de updates voor die software moet maken.

Wanneer u een update maakt die moet worden geïmplementeerd met behulp van Device Update voor IoT Hub, begint u met de benadering op basis van installatiekopieën of pakketten, afhankelijk van uw scenario.

Een eenvoudig importmanifest voor Device Update maken

Zodra u uw updatebestanden hebt, maakt u een importmanifest om de update te beschrijven. Als u dit nog niet hebt gedaan, moet u vertrouwd raken met de basisconcepten voor importeren. Hoewel het mogelijk is om handmatig een JSON-importmanifest te maken met behulp van een teksteditor, gebruikt deze handleiding PowerShell als voorbeeld.

Tip

Probeer de zelfstudies voor installatiekopieën, pakketten of proxy-updates als u dit nog niet hebt gedaan. U kunt ook alleen voorbeeldmanifestbestanden uit deze zelfstudies bekijken voor naslaginformatie.

  1. Git-opslagplaats klonen Azure/iot-hub-device-update .

  2. Navigeer naar Tools/AduCmdlets in uw lokale kloon vanuit PowerShell.

  3. Voer de volgende opdrachten uit nadat u de volgende voorbeeldparameterwaarden hebt vervangen door uw eigen waarden: Provider, Naam, Versie, Eigenschappen, Handler, Geïnstalleerde criteria, Bestanden. Zie Schema- en API-gegevens importeren voor meer informatie over de waarden die u kunt gebruiken. Houd er met name rekening mee dat dezelfde exacte set compatibiliteitseigenschappen niet kan worden gebruikt met meer dan één combinatie van provider en naam.

    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
    

Nadat u het importmanifest hebt gemaakt en u klaar bent om de update te importeren, kunt u naar de koppeling Volgende stappen onder aan deze pagina schuiven.

Een geavanceerd importmanifest voor Device Update maken voor een proxy-update

Als uw update complexer is, zoals een proxy-update, moet u mogelijk meerdere importmanifesten maken. U kunt hetzelfde PowerShell-script uit de vorige sectie gebruiken om bovenliggende en onderliggende importmanifesten te maken voor complexe updates. Voer de volgende opdrachten uit nadat u de voorbeeldparameterwaarden hebt vervangen door uw eigen parameter. Zie Schema- en API-gegevens importeren voor meer informatie over de waarden die u kunt gebruiken.

  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

Volgende stappen