Dela via


Hitta och ta bort ej anslutna hanterade och ohanterade Azure-diskar med hjälp av Azure PowerShell

Gäller för: ✔️ Virtuella Linux-datorer ✔️ med virtuella Windows-datorer ✔️ – flexibla skalningsuppsättningar ✔️ Enhetliga skalningsuppsättningar

När du tar bort en virtuell dator (VM) i Azure tas som standard inga diskar som är anslutna till den virtuella datorn bort. Den här funktioner ser till att inga data går förlorade om en virtuell dator skulle tas bort oavsiktligt. När en virtuell dator har tagits bort fortsätter du att betala för okopplade diskar. Den här artikeln visar hur du hittar och tar bort okopplade diskar och minskar onödiga kostnader.

Kommentar

Du kan använda kommandot Get-AzureDisk för att hämta LastOwnershipUpdateTime för valfri disk. Den här egenskapen representerar när diskens tillstånd senast uppdaterades. För en disk som inte är uppkopplad visas den tid då disken var okopplad. Den här egenskapen är tom för nyligen skapade diskar tills deras tillstånd ändras.

Hanterade diskar: Hitta och ta bort ej anslutna diskar

Följande skript söker efter ej anslutna hanterade diskar genom att undersöka värdet för egenskapen ManagedBy . När en hanterad disk är ansluten till en virtuell dator innehåller egenskapen ManagedBy resurs-ID för den virtuella datorn. När en hanterad disk är oansluten är egenskapen ManagedBy null. Skriptet undersöker alla hanterade diskar i en Azure-prenumeration. När skriptet hittar en hanterad disk med egenskapen ManagedBy inställd på null, avgör skriptet att disken är oansluten.

Viktigt!

Kör först skriptet genom att ange variabeln deleteUnattachedDisks till 0. Med den här åtgärden kan du hitta och visa alla ej anslutna hanterade diskar.

När du har granskat alla okopplade diskar kör du skriptet igen och anger variabeln deleteUnattachedDisks till 1. Med den här åtgärden kan du ta bort alla ej anslutna hanterade diskar.

# Set deleteUnattachedDisks=1 if you want to delete unattached Managed Disks
# Set deleteUnattachedDisks=0 if you want to see the Id of the unattached Managed Disks
$deleteUnattachedDisks=0
$managedDisks = Get-AzDisk
foreach ($md in $managedDisks) {
    # ManagedBy property stores the Id of the VM to which Managed Disk is attached to
    # If ManagedBy property is $null then it means that the Managed Disk is not attached to a VM
    if($md.ManagedBy -eq $null){
        if($deleteUnattachedDisks -eq 1){
            Write-Host "Deleting unattached Managed Disk with Id: $($md.Id)"
            $md | Remove-AzDisk -Force
            Write-Host "Deleted unattached Managed Disk with Id: $($md.Id) "
        }else{
            $md.Id
        }
    }
 }

Ohanterade diskar: Hitta och ta bort ej anslutna diskar

Ohanterade diskar är VHD-filer som lagras som sidblobar i Azure Storage-konton. Följande skript söker efter ohanterade ohanterade diskar (sidblobar) genom att undersöka värdet för egenskapen LeaseStatus . När en ohanterad disk är ansluten till en virtuell dator är egenskapen LeaseStatus inställd på Låst. När en ohanterad disk inte är uppkopplad är egenskapen LeaseStatus inställd på Olåst. Skriptet undersöker alla ohanterade diskar i alla Azure Storage-konton i en Azure-prenumeration. När skriptet hittar en ohanterad disk med egenskapen LeaseStatus inställd på Olåst, avgör skriptet att disken är okopplad.

Viktigt!

Kör först skriptet genom att ange variabeln deleteUnattachedVHDs till $false. Med den här åtgärden kan du hitta och visa alla ohanterade ohanterade virtuella hårddiskar.

När du har granskat alla diskar som inte är anslutna kör du skriptet igen och anger variabeln deleteUnattachedVHDs till $true. Med den här åtgärden kan du ta bort alla ohanterade ohanterade virtuella hårddiskar.

# Set deleteUnattachedVHDs=$true if you want to delete unattached VHDs
# Set deleteUnattachedVHDs=$false if you want to see the Uri of the unattached VHDs
$deleteUnattachedVHDs=$false
$storageAccounts = Get-AzStorageAccount
foreach($storageAccount in $storageAccounts){
    $storageKey = (Get-AzStorageAccountKey -ResourceGroupName $storageAccount.ResourceGroupName -Name $storageAccount.StorageAccountName)[0].Value
    $context = New-AzStorageContext -StorageAccountName $storageAccount.StorageAccountName -StorageAccountKey $storageKey
    $containers = Get-AzStorageContainer -Context $context
    foreach($container in $containers){
        $blobs = Get-AzStorageBlob -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){
                        Write-Host "Deleting unattached VHD with Uri: $($_.ICloudBlob.Uri.AbsoluteUri)"
                        $_ | Remove-AzStorageBlob -Force
                        Write-Host "Deleted unattached VHD with Uri: $($_.ICloudBlob.Uri.AbsoluteUri)"
                    }
                    else{
                        $_.ICloudBlob.Uri.AbsoluteUri
                    }
            }
        }
    }
}

Nästa steg

Mer information finns i Ta bort ett lagringskonto och Identifiera överblivna diskar med PowerShell