Powershell azure查找和删除未连接的磁盘

Powershell azure查找和删除未连接的磁盘,powershell,azure,azure-storage,azure-storage-blobs,Powershell,Azure,Azure Storage,Azure Storage Blobs,我试图在azure上找到我的磁盘,但我似乎只有一个磁盘,而我至少有20个左右 语法: Get-AzureDisk 遗憾的是,只有一张磁盘显示了我相信是classicVM的 有人能帮忙吗 以防万一,查找未连接磁盘的语法 Get-AzureDisk | Where-Object {$_.AttachedTo -eq $Null} 语法在我看来是正确的。当您运行getazuredisk命令时,您看到了什么?AzureDisk为当前订阅()检索磁盘存储库中所有磁盘的数据。如果两个命令的输出(您运行的

我试图在azure上找到我的磁盘,但我似乎只有一个磁盘,而我至少有20个左右

语法:

Get-AzureDisk
遗憾的是,只有一张磁盘显示了我相信是classicVM的

有人能帮忙吗

以防万一,查找未连接磁盘的语法

Get-AzureDisk | Where-Object {$_.AttachedTo -eq $Null}

语法在我看来是正确的。当您运行getazuredisk命令时,您看到了什么?AzureDisk为当前订阅()检索磁盘存储库中所有磁盘的数据。如果两个命令的输出(您运行的命令和AzureDisks的输出)相同,则您可能选择了一个没有那么多独立磁盘的订阅

谢谢,
Aung

您的虚拟机是在经典型还是ARM型中部署的

如果磁盘已连接到classic VM,并且您选择了包含这些磁盘的订阅,那么您应该能够通过Get-AzureDisk命令查看所有这些磁盘。(您提供的语法是正确的。)

如果磁盘已连接到classic VM,但您不确定选择了哪个订阅,请通过Get-AzureSubscription命令查看当前订阅。如果要选择其他订阅,请使用命令

如果您的磁盘已从ARM虚拟机上分离,或者您的ARM虚拟机已在未删除磁盘的情况下删除,则您可以从Azure portal()中删除磁盘。选择存储帐户,然后单击独立VHD所在的存储帐户,单击Blob,单击包含VHD的容器,搜索/单击VHD,然后单击delete

请注意,没有用于获取Azure ARM VM磁盘的直接PowerShell命令。但是,对于现有VM和连接的磁盘,可以使用Get-AzureRmVM作为VM返回的一部分返回数据磁盘,然后使用Remove-AzureRmVMDataDisk命令删除ARM数据磁盘。(这可能不适用于您的场景,因为您正在查找未连接的磁盘。)

请确保选择了正确的订阅,并为不同的部署模型选择了相应的命令/操作


如果有帮助,请告诉我们。谢谢

这篇文章包括一些脚本,这些脚本应该可以帮助您实现您的需求

非托管磁盘:查找和删除未连接的磁盘


在我看来,这段代码是干净、简单的,并且能够完成任务

$disksList =  (Get-AzDisk | select  DiskState,Name,ResourceGroupName | where DiskState -eq 'Unattached')

  foreach($disk in $disksList){

    Remove-AzDisk -DiskName $disk.Name -ResourceGroupName $disk.ResourceGroupName -Force

  }

谢谢你的回复。我只是在寻找powershell commmand,但希望你们将来能添加一个。感谢反馈。该团队正在进行类似的工作,以获取AzureDisk。请与Azure PowerShell未来版本保持同步。谢谢您好,我正在尝试使用基于Azure Web的CLI在我的资源组中查找此类未连接的磁盘,但在响应中看不到“diskState”参数:我在Azure Web CLI控制台中,并执行命令“az disk list--resource group XXXXXX--query'[]。{name:name,diskState:diskState}”
# Set deleteUnattachedVHDs=1 if you want to delete unattached VHDs
# Set deleteUnattachedVHDs=0 if you want to see the Uri of the unattached VHDs
$deleteUnattachedVHDs=0

$storageAccounts = Get-AzureRmStorageAccount

foreach($storageAccount in $storageAccounts){

    $storageKey = (Get-AzureRmStorageAccountKey -ResourceGroupName $storageAccount.ResourceGroupName -Name $storageAccount.StorageAccountName)[0].Value

    $context = New-AzureStorageContext -StorageAccountName $storageAccount.StorageAccountName -StorageAccountKey $storageKey

    $containers = Get-AzureStorageContainer -Context $context

    foreach($container in $containers){

        $blobs = Get-AzureStorageBlob -Container $container.Name -Context $context

        #Fetch all the Page blobs with extension .vhd as only Page blobs can be attached as disk to Azure VMs
        $blobs | Where-Object {$_.BlobType -eq 'PageBlob' -and $_.Name.EndsWith('.vhd')} | ForEach-Object { 

            #If a Page blob is not attached as disk then LeaseStatus will be unlocked
            if($_.ICloudBlob.Properties.LeaseStatus -eq 'Unlocked'){

                  if($deleteUnattachedVHDs -eq 1){

                        Write-Host "Deleting unattached VHD with Uri: $($_.ICloudBlob.Uri.AbsoluteUri)"

                        $_ | Remove-AzureStorageBlob -Force

                        Write-Host "Deleted unattached VHD with Uri: $($_.ICloudBlob.Uri.AbsoluteUri)"
                  }
                  else{

                        $_.ICloudBlob.Uri.AbsoluteUri

                  }

            }

        }

    }

}
$disksList =  (Get-AzDisk | select  DiskState,Name,ResourceGroupName | where DiskState -eq 'Unattached')

  foreach($disk in $disksList){

    Remove-AzDisk -DiskName $disk.Name -ResourceGroupName $disk.ResourceGroupName -Force

  }