如何删除" bootdiagnostics"删除Azure VM时存储blob中的容器?

时间:2016-02-12 14:51:32

标签: powershell azure azure-storage azure-storage-blobs azure-diagnostics

我的任务是自动创建Azure VM,并且我自然会尝试部署VM映像或多或少地破坏迭代。

我刚刚发现我的存储帐户的blob服务正在收集一个用于启动诊断的容器列表。

因为我删除了许多属于这些的VM,这些容器对我来说都没用,而在门户网站中,它们挤出了我想要的几个有用的文件夹。事实上,我有一个破坏VM的脚本(删除资源,VHD等);我希望这个脚本也能杀死这些诊断容器。

但容器名称非常笨拙 - 只包含部分主机名......

  • 我如何从Powershell中识别属于特定VM的诊断容器,以便我可以将其与其他资源一起删除?
  • 为什么Azure不能更优雅地处理这个问题,为什么我必须"发现"删除VM时,不会删除诊断容器和VHD?是否还有另一个我不知道的按钮或屏幕?

enter image description here

2 个答案:

答案 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
}