새 업데이트를 가져오고 IoT Hub용 디바이스 업데이트로 가져오기 위한 업데이트를 준비하는 방법을 알아봅니다.
필수 조건
- IoT Hub용 디바이스 업데이트가 활성화된 IoT Hub에 대한 액세스.
- IoT Hub 내에서 Device Update를 위해 프로비저닝된 IoT 디바이스(또는 시뮬레이터).
- PowerShell 5 이상(Linux, macOS 및 Windows 설치 포함)
- 지원되는 브라우저:
- Microsoft Edge
- Google Chrome
디바이스에 대한 업데이트 가져오기
이제 디바이스 업데이트를 설정하고 디바이스를 프로비전했으므로 해당 디바이스에 배포할 업데이트 파일이 필요합니다.
OEM(원본 장비 제조업체) 또는 솔루션 통합자에서 디바이스를 구입한 경우 업데이트를 만들 필요 없이 해당 조직에서 업데이트 파일을 제공할 가능성이 큽니다. 업데이트를 제공하는 방법을 알아보려면 OEM 또는 솔루션 통합자에 문의하세요.
조직에서 사용하는 디바이스에 대한 소프트웨어를 이미 만든 경우 해당 소프트웨어에 대한 업데이트를 만들 수 있는 동일한 그룹이 됩니다.
IoT Hub용 디바이스 업데이트를 사용하여 배포할 업데이트를 만들 때, 시나리오에 따라 이미지 기반 접근 방식 또는 패키지 기반 접근 방식으로 시작하십시오.
기본 Device Update 가져오기 매니페스트 만들기
업데이트 파일이 있으면 업데이트를 설명하는 가져오기 매니페스트를 만듭니다. 아직 수행하지 않은 경우 기본 가져오기 개념숙지해야 합니다. 텍스트 편집기를 사용하여 수동으로 가져오기 매니페스트 JSON을 작성할 수 있지만 이 가이드에서는 PowerShell을 예로 사용합니다.
팁 (조언)
아직 이미지 기반, 패키지 기반, 또는 프록시 업데이트 자습서를 사용해 보지 않았다면 시도해 보세요. 참조를 위해 해당 자습서에서 샘플 가져오기 매니페스트 파일을 볼 수도 있습니다.
PowerShell을 사용하여 로컬 클론에서
Tools/AduCmdlets으로 이동합니다.공급자, 이름, 버전, 속성, 처리기, 설치된 조건, 파일등 샘플 매개 변수 값을 사용자 고유의 매개 변수 값으로 바꾼 후 다음 명령을 실행합니다. 사용할 수 있는 값에 대한 자세한 내용은 가져오기 스키마 및 API 정보 참조하세요. 특히 동일한 호환성 속성 집합을 둘 이상의 공급자 및 이름 조합과 함께 사용할 수 없습니다.
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
가져오기 매니페스트를 만든 후 업데이트를 가져올 준비가 되면 이 페이지의 맨 아래에 있는 다음 단계 링크로 스크롤할 수 있습니다.
프록시 업데이트에 대한 고급 디바이스 업데이트 가져오기 매니페스트 만들기
프록시 업데이트같이 업데이트가 더 복잡한 경우 여러 가져오기 매니페스트를 만들어야 할 수 있습니다. 이전 섹션에서 동일한 PowerShell 스크립트를 사용하여 복잡한 업데이트에 대한 부모 및 자식 가져오기 매니페스트를 만들 수 있습니다. 샘플 매개 변수 값을 사용자 고유의 값으로 바꾼 후 다음 명령을 실행합니다. 사용할 수 있는 값에 대한 자세한 내용은 가져오기 스키마 및 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