Powershell Remove AzureDisk抛出错误,不确定原因

Powershell Remove AzureDisk抛出错误,不确定原因,powershell,azure,virtual-machine,Powershell,Azure,Virtual Machine,我有一个Azure虚拟机,我正在尝试使用Powershell删除它。我还想删除虚拟机操作系统所在的磁盘(没有数据磁盘)。 我假设需要以下两个cmdlet: 移除AzureVM 取出AzureDisk 这是我的密码: $VMs = Get-AzureVM $svcName foreach ($VM in $VMs) { $OSDisk = ($VM | Get-AzureOSDisk) if ($VM.InstanceStatus -eq "ReadyRole") {

我有一个Azure虚拟机,我正在尝试使用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
}
执行此操作时,删除AzureVM的调用将成功返回,但删除AzureDisk的调用将返回错误:

删除AzureDisk:BadRequest:名称为的磁盘 XXX目前正在使用中 通过在托管服务中运行的虚拟机YYY ZZZ,部署XYZ

奇怪的是,我可以在几分钟后发出相同的调用来删除AzureDisk,并且它成功返回

似乎删除AzureVM的调用返回得太快了。i、 e.在VM完全移除之前,或在磁盘链接以任何速度移除之前,其报告成功

有人能解释为什么会这样,以及我如何解决这个问题吗

提前谢谢


Jamie

这里发生的事情是,当虚拟机使用BLOB存储时,存储在BLOB存储中的磁盘被锁定。您正在删除VM,但需要几分钟才能释放BLOB上的租约。这就是为什么您可以在几分钟后删除它


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

我最后编写了一个脚本,创建VM,克隆它,然后删除克隆。作为其中的一部分,我需要等待,直到租约被释放,因此,如果你遇到同样的问题,你可能想查看我的博客文章,因为它会有一些代码,可能会帮助你

问候


杰米

我对此困惑了好一阵子。最终,我找到了一个不同的命令来执行我认为我正在使用这个命令执行的操作。我建议使用remove-azuredatadisk命令删除磁盘,因为它会自动中断租约

Get-AzureVM -ServiceName <servicename> -name <vmname> |Remove-AzureDataDisk -lun <lun#> -deletevhd | Update-AzureVM
这是有关的。在这里交叉张贴我的答案:

我无法使用(2016)门户删除我(经典)存储帐户中的孤立磁盘。下面是使用PowerShell删除这些孤立磁盘的详细演练

动力壳 如果尚未安装PowerShell,请下载并安装。(.)此doclink的初始步骤:

  • 检查Azure PowerShell模块在安装后是否可用:
    Get模块–列表可用

  • 如果未列出Azure PowerShell模块,您可能需要导入它:
    导入模块Azure

  • 登录Azure资源管理器:
    登录AzureRmAccount

AzurePublishSettingsFile
  • 检索您的PublishSettings文件。
    获取AzurePublishSettingsFile

    • Get-AzurePublishSettings文件启动并提示您下载可保存在任何位置的XML文件。
    • 参考:
  • 导入AzurePublishSettingsFile并指定刚保存的文件的路径。
    导入AzurePublishSettings文件-PublishSettings文件“”

显示和删除磁盘
  • 显示当前磁盘。(参考资料:)
    获取AzureDisk

  • 快速卸下所有磁盘。(归功于)
    获取azuredisk |删除azuredisk

  • 或按名称删除磁盘。(归功于)
    Remove-AzureDisk-DiskName-disk-name-000000000000000000-DeleteVHD


谢谢,迈克,我想可能是这样的。知道正确的命名法是“租赁”也是件好事。如果任何一个正在阅读的人可以分享任何违反租约的代码,那么如果你能分享,我将不胜感激。在这篇TechNet文章中,您可以看到他们是如何使用PowerShell使用存储SDK实现的:您需要调整它,因为它正在做一些您不关心的事情。
Get-AzureVM -ServiceName <servicename> -name <vmname> | Get-AzureDataDisk