我有一个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命令删除集线器中的所有设备?
答案 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分钟。