我的任务是自动创建Azure VM,并且我自然会尝试部署VM映像或多或少地破坏迭代。
我刚刚发现我的存储帐户的blob服务正在收集一个用于启动诊断的容器列表。
因为我删除了许多属于这些的VM,这些容器对我来说都没用,而在门户网站中,它们挤出了我想要的几个有用的文件夹。事实上,我有一个破坏VM的脚本(删除资源,VHD等);我希望这个脚本也能杀死这些诊断容器。
但容器名称非常笨拙 - 只包含部分主机名......
答案 0 :(得分:2)
根据我的粗略看,bootdiagnostic存储容器名称可能只包含名称的部分VM名称> 8个字符。但是,容器名称的最后一部分(即VM名称后面的名称部分)是VM的唯一标识符。您可以使用以下文章中提到的步骤检索VM的唯一标识符名称:https://azure.microsoft.com/en-us/blog/accessing-and-using-azure-vm-unique-id/。对于ARM VM,您可以通过REST检索VM名称的唯一标识符。
然后可以解析bootdiagnostic存储容器名称字符串以获取VM的唯一标识符,以找出哪些VM正在使用哪个blob存储容器。
谢谢, 昂
答案 1 :(得分:1)
我发现UUID是“状态”文件名称的一部分(我不知道它是什么)与OS VHD文件一起存在!
function getUUID([string] $vmname) {
$storageContext = (Get-AzureRmStorageAccount | Where-Object{$_.StorageAccountName -match $azureStorage}).Context
$storageBlob = Get-AzureStorageBlob -Context $storageContext -Container "vhds"
$vhdList = $storageBlob | Where-Object{$_.Name -match "$vmname"} | Where-Object{$_.Name -match "^$hostname.*\.status$"}
$uuid = $vhdList.Name # Get name including UUID
$uuid = $uuid -replace "\.status","" # Remove suffix (".status")
$uuid = $uuid -replace ".*?\.","" # Remove prefix ("bootdiagnostics-$vmname.")
return $uuid
}