2

我的任务是自动创建Azure虚拟机,自然我会做一些或多或少破坏性尝试部署虚拟机映像的迭代。如何在删除Azure虚拟机时从存储区删除“bootdiagnostics”容器?

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

因为我删除了许多属于这些虚拟机的虚拟机,所以这些容器对我来说都没有用处,并且在门户网站中,它们挤出了我想要的几个有用文件夹。实际上,我有一个脚本来销毁虚拟机(这会去除资源,VHD等)。我想让这个脚本也杀死这些诊断容器。

但容器具有非常别扭的名字 - 并且只包含主机名的一部分......

  • 我怎样才能从PowerShell中,识别属于一个特定的VM诊断容器,让我可以将其与其他资源一起删除?
  • 为什么Azure不能更好地处理这个问题,为什么我必须“发现”在删除虚拟机时不会删除诊断容器和VHD?是否还有另一个我不知道的按钮或屏幕?

enter image description here

回答

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 
} 
2

根据我粗略地看一下,bootdiagnostic存储容器名称中只能包含虚拟机名称的名称> 8个字符的一部分。但是,容器名称的最后一部分,即虚拟机名称后面的部分名称,是虚拟机的唯一标识符。您可以使用以下文章中提到的步骤检索VM的唯一标识符名称:https://azure.microsoft.com/en-us/blog/accessing-and-using-azure-vm-unique-id/。对于ARM VM,您可以通过REST检索VM名称的唯一标识符。

如果可以解析bootdiagnostic存储容器名称字符串以获取VM的唯一标识符以找出哪些VM正在使用哪个blob存储容器。

感谢, 昂

+0

谢谢!这听起来很有希望,我会尽快尝试并报告。 – KlaymenDK

+0

基本上''UUID = Get-WmiObject -class Win32_ComputerSystemProduct --namespace root \ CIMV2' from _within_ VM。但是如果我不在虚拟机内部,而是在远程系统上使用Azure Powershell进行查询呢? – KlaymenDK

+0

根据 https://social.msdn.microsoft.com/Forums/en-US/46308a1d-d3c4-4607-9c75-9633c347def6/azure-vm-unique-id-is-not-exposed-through-rest- api?forum = WAVirtualMachinesforWindows 我们无法通过REST获取VM的唯一标识符 – gkapagunta