如何使用Azure CLI从Azure IoT中心删除所有设备?

时间:2019-06-12 17:11:44

标签: azure powershell azure-iot-hub azure-cli

我有一个Azure IoT中心,其中包含我们团队的E2E测试生成的大量设备。我想偶尔使用Azure CLI清除集线器。

我正在使用Azure IoT extension Powershell 上本地运行Azure CLI。

根据我的研究,有一种方法可以获取集线器中以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命令删除集线器中的所有设备?

3 个答案:

答案 0 :(得分:2)

只需在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中查找IoT设备来跟踪进度。

答案 1 :(得分:0)

今天,仅凭一条命令似乎无法实现。基础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

他们在那里使用简单的for循环大规模创建设备。您可能可以重用其中的一些并将其与az iot hub device-identity list命令结合

答案 2 :(得分:0)

除了@silent之外,Azure IoT中心还支持blob中所述的导出/导入设备批量作业。 看一下以下链接:

Iot Hub Resource - Import Devices

Import devices example – bulk deletion

基本上,调用导出设备将创建所有设备的blob,然后使用 ImportMode.Delete 模式为每个设备更新此列表,该blob已准备就绪调用导入设备批量作业。 如果所有设备都是众所周知的设备ID,则可以跳过导出设备步骤,并使用预定义的输入blob。

请注意,批量作业是一个长期运行的后台进程,因此我们可以使用轮询其状态或将Azure事件网格用于IoT中心事件。删除100台设备大约需要1分钟。