Как удалить контейнер bootdiagnostics из большого двоичного объекта хранилища при удалении виртуальной машины Azure?

Мне поручено автоматизировать создание виртуальных машин Azure, и, естественно, я делаю несколько более или менее неудачных итераций, пытаясь развернуть образ виртуальной машины.

Я только что обнаружил, что служба больших двоичных объектов моей учетной записи хранения собирает длинный список контейнеров для диагностики загрузки.

Поскольку я удалил многие из виртуальных машин, которым они принадлежат, все эти контейнеры для меня бесполезны, а на портале они вытесняют несколько полезных папок, которые мне нужны. Фактически, у меня есть сценарий для уничтожения виртуальных машин (который удаляет ресурсы, VHD и т. Д.); Я хочу, чтобы этот сценарий также уничтожил эти диагностические контейнеры.

Но у контейнеров очень неудобные имена - и они содержат только часть имени хоста ...

  • Как я могу из Powershell определить контейнер диагностики, принадлежащий конкретной виртуальной машине, чтобы я мог удалить его вместе с другими ресурсами?
  • Почему Azure не справляется с этим более элегантно, почему я должен «обнаруживать», что контейнеры диагностики и виртуальные жесткие диски не удаляются при удалении виртуальной машины? Есть ли просто еще одна кнопка или экран, о которых я не знаю?

введите описание изображения здесь


person KlaymenDK    schedule 12.02.2016    source источник


Ответы (2)


Судя по моему беглому взгляду, имена контейнеров хранилища bootdiagnostic могут содержать только часть имен виртуальных машин для имен> 8 символов. Однако последняя часть имени контейнера, часть имени сразу после имени вашей виртуальной машины, является уникальным идентификатором вашей виртуальной машины. Вы можете получить уникальное имя идентификатора вашей виртуальной машины, выполнив действия, описанные в следующей статье: https://azure.microsoft.com/en-us/blog/accessing-and-using-azure-vm-unique-id/. Для виртуальных машин ARM вы можете получить уникальный идентификатор своего имени виртуальной машины через REST.

Затем if может проанализировать строку имени контейнера хранилища bootdiagnostic, чтобы получить уникальный идентификатор виртуальной машины, чтобы выяснить, какие виртуальные машины используют какие контейнеры хранилища больших двоичных объектов.

Спасибо, Аунг

person Aung Oo - MSFT    schedule 14.02.2016
comment
Спасибо! Это звучит многообещающе, я попробую, как только смогу, и доложу. - person KlaymenDK; 15.02.2016
comment
Итак, в основном $UUID = Get-WmiObject -class Win32_ComputerSystemProduct -namespace root\CIMV2 из внутри виртуальной машины. Но что, если я не на виртуальной машине, а нахожусь в удаленной системе и использую Azure Powershell для запроса? - person KlaymenDK; 15.02.2016
comment
согласно social.msdn.microsoft.com/Forums/en-US/ Мы не можем получить уникальный идентификатор виртуальной машины через REST - person gkapagunta; 19.10.2016

Я обнаружил, что UUID является частью имени файла «статуса» (я понятия не имею, что это такое), который находится рядом с файлом 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
}
person KlaymenDK    schedule 11.03.2016