Delen via


Niet-gekoppelde beheerde en niet-beheerde Azure-schijven zoeken en verwijderen met behulp van Azure PowerShell

Van toepassing op: ✔️ Virtuele Linux-machines voor Windows-VM's ✔️ ✔️ Flexibele schaalsets Uniform-schaalsets ✔️

Wanneer u een virtuele machine (VM) in Azure verwijdert, worden alle schijven die aan de virtuele machine zijn gekoppeld, standaard niet verwijderd. Deze functie helpt gegevensverlies te voorkomen door het onbedoeld verwijderen van VM's. Nadat een virtuele machine is verwijderd, blijft u betalen voor niet-gekoppelde schijven. In dit artikel leest u hoe u niet-gekoppelde schijven kunt zoeken en verwijderen en onnodige kosten kunt verlagen.

Notitie

U kunt de opdracht Get-AzureDisk gebruiken om de LastOwnershipUpdateTime voor elke schijf op te halen. Deze eigenschap geeft aan wanneer de status van de schijf voor het laatst is bijgewerkt. Voor een niet-gekoppelde schijf wordt de tijd weergegeven waarop de schijf niet is gekoppeld. Deze eigenschap is leeg voor nieuw gemaakte schijven, totdat de status wordt gewijzigd.

Beheerde schijven: niet-gekoppelde schijven zoeken en verwijderen

Het volgende script zoekt naar niet-gekoppelde beheerde schijven door de waarde van de eigenschap ManagedBy te onderzoeken. Wanneer een beheerde schijf is gekoppeld aan een virtuele machine, bevat de eigenschap ManagedBy de resource-id van de virtuele machine. Wanneer een beheerde schijf niet is gekoppeld, is de eigenschap ManagedBy null. Het script onderzoekt alle beheerde schijven in een Azure-abonnement. Wanneer het script een beheerde schijf zoekt waarvoor de eigenschap ManagedBy is ingesteld op null, bepaalt het script dat de schijf niet is gekoppeld.

Belangrijk

Voer eerst het script uit door de variabele deleteUnattachedDisks in te stellen op 0. Met deze actie kunt u alle niet-gekoppelde beheerde schijven zoeken en weergeven.

Nadat u alle niet-gekoppelde schijven hebt bekeken, voert u het script opnieuw uit en stelt u de variabele deleteUnattachedDisks in op 1. Met deze actie kunt u alle niet-gekoppelde beheerde schijven verwijderen.

# 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
        }
    }
 }

Niet-beheerde schijven: niet-gekoppelde schijven zoeken en verwijderen

Niet-beheerde schijven zijn VHD-bestanden die zijn opgeslagen als pagina-blobs in Azure-opslagaccounts. Het volgende script zoekt naar niet-gekoppelde niet-beheerde schijven (pagina-blobs) door de waarde van de eigenschap LeaseStatus te onderzoeken. Wanneer een niet-beheerde schijf is gekoppeld aan een virtuele machine, wordt de eigenschap LeaseStatus ingesteld op Vergrendeld. Wanneer een niet-beheerde schijf niet is gekoppeld, wordt de eigenschap LeaseStatus ingesteld op Ontgrendeld. Het script onderzoekt alle niet-beheerde schijven in alle Azure-opslagaccounts in een Azure-abonnement. Wanneer het script een niet-beheerde schijf zoekt met de eigenschap LeaseStatus ingesteld op Ontgrendeld, bepaalt het script dat de schijf niet is gekoppeld.

Belangrijk

Voer eerst het script uit door de variabele deleteUnattachedVHD's in te stellen op $false. Met deze actie kunt u alle niet-beheerde VHD's zoeken en weergeven.

Nadat u alle niet-gekoppelde schijven hebt gecontroleerd, voert u het script opnieuw uit en stelt u de variabele deleteUnattachedVHD's in op $true. Met deze actie kunt u alle niet-beheerde niet-beheerde VHD's verwijderen.

# 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
                    }
            }
        }
    }
}

Volgende stappen

Zie Een opslagaccount verwijderen en Zwevende schijven identificeren met behulp van PowerShell voor meer informatie