gpt4 book ai didi

powershell - 删除 VM 后从 Azure 资源管理器中删除 VHD

转载 作者:行者123 更新时间:2023-12-01 12:29:57 29 4
gpt4 key购买 nike

我注意到,如果您创建一个新虚拟机,然后删除它(及其相关资源),您实际上不会删除相应的 VHD 文件 - 该文件是留在 blob 存储中,会阻止配置具有相同主机名的新计算机,并且还会因浪费和未使用的存储而花费大量金钱。我希望将 VHD 与 VM 一起删除。

我在哪里可以找到关于如何处理这个问题的当前智慧的好文章?我能找到的只是 2013 年之前的引用资料,显然是针对“经典”版本的。

我编写了以下代码来尝试解决这种情况。我有两个用例,首先我必须清除所有积累的垃圾,之后我“只”需要确保在删除以后的每台计算机后进行清理。

write-output("Removing orphaned disks for hostname ""$hostname"" ...")
$storageContext = (Get-AzureRmStorageAccount | Where-Object{$_.StorageAccountName -match $azureStorage}).Context
$storageBlob = Get-AzureStorageBlob -Context $storageContext -Container "vhds"
$vhdList = $storageBlob | Where-Object{$_.Name -match "$hostname"}
foreach($disk in $vhdList) {
$diskname = $disk.Name
write-output("Removing VHD ""$diskname"" ...")
Remove-AzureDisk -Diskname "$diskname" -DeleteVHD
write-output("Removed VHD ""$diskname"" ... [OK]")
}
write-output("Removed orphaned disks ... [OK]")

现在,当我运行该程序时,我会得到我希望看到的 VHD 文件的详细列表(以及一些相应的“*.status”文件)。但是,Remove-AzureDisk 命令会产生错误Remove-AzureDisk:ResourceNotFound:指定名称的磁盘不存在,因此它实际上不起作用。

您会注意到,我中途从新的“ARM”命令切换到“经典”版本 - 这可能是我的问题的一部分,但我没有运气想出更好的命令.

更新:

这似乎可以解决问题:

# Verify that the OS VHD does not already exist
write-output("Checking for blocking VHD's ...")
$storageContext = (Get-AzureRmStorageAccount | Where-Object{$_.StorageAccountName -match $azureStorage}).Context
$storageBlob = Get-AzureStorageBlob -Context $storageContext -Container "vhds"
$vhdList = $storageBlob | Where-Object{$_.Name -match "$hostname"}
if ($vhdList) {
write-output("There is an existing VHD blocking host ""$hostname"" in storage container ""$($storageContext.BlobEndPoint)vhds""):")
foreach($vhdName in $vhdList.Name) {
write-output("- $vhdName")
}
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | out-null
$answer = [System.Windows.Forms.MessageBox]::Show("There is an existing VHD blocking host ""$hostname"" in storage container ""$($storageContext.BlobEndPoint)vhds"").`nDo you wish to remove the existing VHD file?" , "Create New VM" , $MB_YESNO)
if ($answer -eq "YES" ) {
# Remove VHD files
foreach($diskName in $vhdList.Name) {
write-output("- Removing VHD ""$diskName""")
Remove-AzureStorageBlob -Blob $diskName -Container "vhds" -Context $storageContext
}
write-output("Checked for blocking VHD's ... [OK]")
} else {
exit(331)
}
}

最佳答案

Azure 资源管理的普遍智慧是,您不再考虑原子单元中的资源,例如虚拟机、存储、网络,而是开始将它们视为一组资源。可以说是一个资源组;)

理论是,您创建一个模板,通过 Rest、Powershell 或模板文件一次性创建整个部署。

然后,您无需删除虚拟机并重新创建它,而是删除整个资源组,然后再次运行部署,然后您将回到原来的位置。

它确实使整个事情更易于管理,并允许更复杂的构建。

使用该模型,如果删除整个资源组,则所有基础资源、Blob、存储帐户、网络都将被删除。

所以,解决你的问题。

Azure 不会像经典管理器那样创建磁盘。基本上你将机器指向一个 blob vhd 就这样了。所以你的命令的问题是没有任何磁盘可删除。

所以你想要的命令

Remove-AzureStorageBlob -Blob $diskname -Container vhds -Context $context 

关于powershell - 删除 VM 后从 Azure 资源管理器中删除 VHD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35204554/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com