I have a number of Azure IoT Hubs each with a number of devices configured on them. I wanted to export the details for each IoT Device. This can’t be done via the Azure Portal (May 2018) so I looked to leverage the Azure.IoTHub New-AzureRmIotHubExportDevices cmdlet.
Now the documentation for New-AzureRmIotHubExportDevices is a little light on. When I was running the New-AzureRmIotHubExportDevices I kept getting the error ‘Operation returned an invalid status code ‘InternalServerError’.
After many attempts (over weeks) I finally was able to export my IoT devices using PowerShell. The key was to generate the SAS Storage Token for the Container rather than creating a blob file to export to and generating a SAS Token for the file. Simply specify the Storage Container to export too.
My sample script below uses the latest (as of May 2018) version of the Azure.IoTHub Module (v3.1.3). It;
- enumerates all Resource Groups in an Azure Subscription and looks for IoT Hubs and puts them into a collection
- then iterates through each IoT Hub, creates an associated Storage Account (if one doesn’t exist)
- Exports the IoT Devices associated with the IoT Hub to Azure Storage
- Downloads the IoT Devices Blob File, opens it and displays through PowerShell console output the IoT Device Names and Status
To use the script you will just need to;
- change your Subscription Name in Line 4
- The location where you want to download the blob files too in Line 31
- if you want to display additional info on each device or do something else with the info change line 71 accordingly
The exported file can be found using Azure Storage Explorer as shown below.
And the script outputs the status to the PowerShell console as shown below.
The exported object contains all the details for each IoT Device as shown below in the IoT Device PSObject.
It is obvious once you work out how the cmdlet works. Hopefully this working example will save someone else a few hours of head scratching.