powershell - 删除 AzureDisk 抛出错误,不知道为什么

标签 powershell azure virtual-machine

我有一个 Azure VM,我正在尝试使用 Powershell 删除它。我还想删除该虚拟机操作系统所在的磁盘(没有数据磁盘)。 我假设我需要以下两个 cmdlet:

  • 删除-AzureVM
  • 删除 AzureDisk

这是我的代码:

$VMs = Get-AzureVM $svcName
foreach ($VM in $VMs)
{
    $OSDisk = ($VM | Get-AzureOSDisk)
    if ($VM.InstanceStatus -eq "ReadyRole") {
        Stop-AzureVM -Name $VM.Name -ServiceName $svcName
    }
    remove-azurevm -ServiceName $svcName -Name $VM.Name
    Remove-AzureDisk -DiskName $OSDisk.DiskName
}

当我执行此操作时,对Remove-AzureVM 的调用成功返回,但对Remove-AzureDisk 的调用返回错误:

Remove-AzureDisk : BadRequest: A disk with name XXX is currently in use by virtual machine YYY running within hosted service ZZZ, deployment XYZ.

奇怪的是,几分钟后我就可以对 Remove-AzureDisk 发出相同的调用,并且它成功返回。

就好像对Remove-AzureVM 的调用返回得太快。即,在虚拟机被完全删除之前,或者在磁盘链接被删除之前,它报告成功。

谁能解释一下为什么会这样以及我如何解决这个问题?

提前致谢

杰米

最佳答案

这里发生的情况是,存储在 BLOB 存储中的磁盘在被虚拟机使用时被锁定。您正在删除 VM,但 BLOB 上的租约需要一些时间才能释放。这就是为什么您可以稍后将其删除。

有一些人编写了 PowerShell 来中断租约,或者您可以使用 PowerShell 来使用 SDK(或直接进行 REST API 调用)来检查租约状态。

关于powershell - 删除 AzureDisk 抛出错误,不知道为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19646583/

相关文章:

xml - PowerShell 将 Get-Content 存储到变量中不返回任何数据

regex - Powershell 正则表达式 - 仅当包含字符串 C 时才在字符串 A 和字符串 B 之间替换

powershell - 如何在Powershell中将-recurse与Move-item一起使用

python - 我无法使用本地 Python 脚本中的矢量填充 Azure 上托管的 Redis Enterprise 矢量数据库

java - 如何在 Play-With-Docker-Lab 中指定 java 的文件夹路径?

Java 虚拟机的字节序

c# - 从 C# 调用 PowerShell 的 where-object

azure - https kubernetes 部署的应用程序

Azure AD 刷新 token 过期

google-cloud-platform - GCP 是否提供多区域虚拟机实例?