Udostępnij przez


Przygotowywanie aktualizacji do zaimportowania do usługi Device Update dla usługi IoT Hub

Dowiedz się, jak uzyskać nową aktualizację i przygotować aktualizację do zaimportowania do usługi Device Update dla usługi IoT Hub.

Wymagania wstępne

Uzyskiwanie aktualizacji dla urządzeń

Po skonfigurowaniu usługi Device Update i aprowizowaniu urządzeń potrzebne będą pliki aktualizacji, które zostaną wdrożone na tych urządzeniach.

  • Jeśli zakupiono urządzenia od producenta oryginalnego sprzętu (OEM) lub integratora rozwiązań, organizacja najprawdopodobniej udostępni ci pliki aktualizacji bez konieczności tworzenia aktualizacji. Skontaktuj się z producentem OEM lub integratorem rozwiązań, aby dowiedzieć się, w jaki sposób udostępniają aktualizacje.

  • Jeśli Twoja organizacja już tworzy oprogramowanie dla używanych urządzeń, ta sama grupa będzie służyć do tworzenia aktualizacji dla tego oprogramowania.

Podczas tworzenia aktualizacji do wdrożenia przy użyciu usługi Device Update dla usługi IoT Hub zacznij od opartego na obrazie lub opartego na pakietach podejścia w zależności od scenariusza.

Tworzenie podstawowego manifestu importowania aktualizacji urządzeń

Po utworzeniu plików aktualizacji utwórz manifest importu, aby opisać aktualizację. Jeśli jeszcze tego nie zrobiłeś, zapoznaj się z podstawowymi pojęciami dotyczącymi importu . Chociaż można ręcznie utworzyć plik JSON manifestu importu przy użyciu edytora tekstowego, ten przewodnik będzie używał programu PowerShell jako przykładu.

Wskazówka

Wypróbuj samouczki oparte na obrazie, oparte na pakietach lub aktualizacji proxy, jeśli jeszcze tego nie zrobiłeś/zrobiłaś. Możesz również po prostu wyświetlić przykładowe pliki manifestu importu z tych samouczków w celach referencyjnych.

  1. cloneAzure/iot-hub-device-updateGit repository.

  2. Przejdź do Tools/AduCmdlets w klonie lokalnym z programu PowerShell.

  3. Uruchom następujące polecenia po zastąpieniu poniższych przykładowych wartości parametrów swoimi własnymi: Dostawca, Nazwa, Wersja, Właściwości, Obsługa, Kryteria Instalacji, Pliki. Aby uzyskać szczegółowe informacje na temat wartości, których można użyć, zobacz Import schema and API information (Importowanie schematu i interfejsu API). W szczególności należy pamiętać, że nie można używać tego samego dokładnie zestawu właściwości zgodności z więcej niż jedną kombinacją dostawcy i nazwy.

    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
    

Po utworzeniu manifestu importu, jeśli jesteś gotowy do zaimportowania aktualizacji, możesz przewinąć na link Następne kroki w dolnej części tej strony.

Tworzenie zaawansowanego manifestu importowania usługi Device Update dla aktualizacji serwera proxy

Jeśli aktualizacja jest bardziej złożona, na przykład aktualizacji serwera proxy , może być konieczne utworzenie wielu importowych manifestów. Możesz użyć tego samego skryptu programu PowerShell z poprzedniej sekcji, aby utworzyć manifesty importu rodzicielskiego i potomnego dla złożonych aktualizacji. Uruchom następujące polecenia po zastąpieniu przykładowych wartości parametrów własnymi. Aby uzyskać szczegółowe informacje na temat wartości, których można użyć, zobacz Import schema and API information (Importowanie schematu i interfejsu 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

Następne kroki