如何使用 Azure CLI 从 Azure IoT Hub 中删除所有设备?
How to delete all devices from Azure IoT Hub using Azure CLI?
我有一个 Azure IoT 中心,其中包含我们团队的 E2E 测试生成的一堆设备。我想每隔一段时间使用 Azure CLI 清除一次集线器。
我 运行 在 Powershell 本地使用 Azure CLI,使用 Azure IoT extension.
根据我的研究,有一种方法可以将集线器中所有设备的列表以 JSON 格式打印到控制台:
az iot hub device-identity list --hub-name "test-hub"
还有一种方法可以删除单个设备标识:
az iot hub device-identity delete --device-id "test-id" --hub-name "test-hub"
如何使用 cli 界面和一些 powershell 命令删除集线器中的所有设备?
今天只用一个命令这似乎是不可能的。底层 REST 接口(这是 cli 和其他一切使用的接口)也没有批量删除:https://docs.microsoft.com/en-us/rest/api/iothub/service/deletedevice
IoT 扩展 Github 有一些自动化示例:https://github.com/Azure/azure-iot-cli-extension/blob/dev/docs/scenario-automation.md
他们 mass-create 设备使用简单的 for 循环。您可能可以重用其中的一些并将其与 az iot hub device-identity list
命令
结合使用
除了@silent 之外,Azure IoT 中心还支持 blob 中描述的 Export/Import 设备 批量作业。
查看以下链接:
Iot Hub Resource - Import Devices
Import devices example – bulk deletion
基本上,调用 Export Devices 将创建所有设备的 blob,然后使用 ImportMode.Delete[= 为每个设备更新此列表27=] 模式,blob 已准备好调用 Import Devices 批量作业。
在所有设备都是 well-known 设备 ID 的情况下,可以跳过 Export Devices 步骤并使用预定义的输入 blob。
请注意,批量作业是一个很长的 运行 后台进程,因此我们可以使用轮询其状态或使用 Azure 事件网格进行 IoT 中心事件。删除 100 台设备大约需要 1 分钟。
只需 运行 PowerShell 中的 For 循环。
首先为 Powershell 安装 Azure CLI:
Invoke-WebRequest -Uri https://aka.ms/installazurecliwindows -OutFile .\AzureCLI.msi; Start-Process msiexec.exe -Wait -ArgumentList '/I AzureCLI.msi /quiet'
然后为 PowerShell 添加 Azure IoT 扩展模块,登录到 Azure,并更改为适当的订阅(更改 <subscription_id>
):
az extension add --name azure-cli-iot-ext
az login
az account set -s <subscription_id>
之后,运行 以下 Foreach 循环将删除所有设备(更改 test-hub
):
$iotHubName = "test-hub"
$json = az iot hub device-identity list --hub-name $iotHubName
$devices = $json | ConvertFrom-Json
Foreach ($device in $devices)
{
az iot hub device-identity delete --device-id $device.deviceId --hub-name $iotHubName
}
注意:截至 2019 年,这是一个极其缓慢的过程。您可以通过在主 portal.azure UI.
中查找物联网设备来跟踪进度
我有一个 Azure IoT 中心,其中包含我们团队的 E2E 测试生成的一堆设备。我想每隔一段时间使用 Azure CLI 清除一次集线器。
我 运行 在 Powershell 本地使用 Azure CLI,使用 Azure IoT extension.
根据我的研究,有一种方法可以将集线器中所有设备的列表以 JSON 格式打印到控制台:
az iot hub device-identity list --hub-name "test-hub"
还有一种方法可以删除单个设备标识:
az iot hub device-identity delete --device-id "test-id" --hub-name "test-hub"
如何使用 cli 界面和一些 powershell 命令删除集线器中的所有设备?
今天只用一个命令这似乎是不可能的。底层 REST 接口(这是 cli 和其他一切使用的接口)也没有批量删除:https://docs.microsoft.com/en-us/rest/api/iothub/service/deletedevice
IoT 扩展 Github 有一些自动化示例:https://github.com/Azure/azure-iot-cli-extension/blob/dev/docs/scenario-automation.md
他们 mass-create 设备使用简单的 for 循环。您可能可以重用其中的一些并将其与 az iot hub device-identity list
命令
除了@silent 之外,Azure IoT 中心还支持 blob 中描述的 Export/Import 设备 批量作业。 查看以下链接:
Iot Hub Resource - Import Devices
Import devices example – bulk deletion
基本上,调用 Export Devices 将创建所有设备的 blob,然后使用 ImportMode.Delete[= 为每个设备更新此列表27=] 模式,blob 已准备好调用 Import Devices 批量作业。 在所有设备都是 well-known 设备 ID 的情况下,可以跳过 Export Devices 步骤并使用预定义的输入 blob。
请注意,批量作业是一个很长的 运行 后台进程,因此我们可以使用轮询其状态或使用 Azure 事件网格进行 IoT 中心事件。删除 100 台设备大约需要 1 分钟。
只需 运行 PowerShell 中的 For 循环。
首先为 Powershell 安装 Azure CLI:
Invoke-WebRequest -Uri https://aka.ms/installazurecliwindows -OutFile .\AzureCLI.msi; Start-Process msiexec.exe -Wait -ArgumentList '/I AzureCLI.msi /quiet'
然后为 PowerShell 添加 Azure IoT 扩展模块,登录到 Azure,并更改为适当的订阅(更改 <subscription_id>
):
az extension add --name azure-cli-iot-ext
az login
az account set -s <subscription_id>
之后,运行 以下 Foreach 循环将删除所有设备(更改 test-hub
):
$iotHubName = "test-hub"
$json = az iot hub device-identity list --hub-name $iotHubName
$devices = $json | ConvertFrom-Json
Foreach ($device in $devices)
{
az iot hub device-identity delete --device-id $device.deviceId --hub-name $iotHubName
}
注意:截至 2019 年,这是一个极其缓慢的过程。您可以通过在主 portal.azure UI.
中查找物联网设备来跟踪进度