Private/Remove-UpgradeMediaDisk.ps1

function Remove-UpgradeMediaDisk {
    <#
    .SYNOPSIS
    Detach and delete the media disk once the VM reached a final state

    .DESCRIPTION
    The disk is billed while it exists. Failures are reported through the return value and never
    change the upgrade result of the VM.
    #>

    [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseShouldProcessForStateChangingFunctions', '', Justification = 'Private helper; the public caller gates with ShouldProcess before invoking it.')]
    [CmdletBinding()]
    [OutputType([pscustomobject])]
    param(
        [Parameter(Mandatory)][string]$ResourceGroupName,
        [Parameter(Mandatory)][string]$VMName,
        [Parameter(Mandatory)][string]$DiskResourceGroupName,
        [Parameter(Mandatory)][string]$DiskName
    )

    try {
        $vm = Get-AzVM -ResourceGroupName $ResourceGroupName -Name $VMName -ErrorAction Stop
        $attached = @($vm.StorageProfile.DataDisks | Where-Object { $_.Name -eq $DiskName })
        if ($attached.Count -gt 0) {
            Write-Verbose "[$VMName] Detaching media disk '$DiskName'."
            $null = Remove-AzVMDataDisk -VM $vm -Name $DiskName -ErrorAction Stop
            $null = Update-AzVM -ResourceGroupName $ResourceGroupName -VM $vm -ErrorAction Stop
        }

        $disk = Get-AzDisk -ResourceGroupName $DiskResourceGroupName -DiskName $DiskName -ErrorAction SilentlyContinue
        if ($disk) {
            $null = Remove-AzDisk -ResourceGroupName $DiskResourceGroupName -DiskName $DiskName -Force -ErrorAction Stop
            Write-Verbose "[$VMName] Media disk '$DiskName' deleted."
        }
        return [pscustomobject]@{ Removed = $true; Error = $null }
    }
    catch {
        return [pscustomobject]@{ Removed = $false; Error = $_.Exception.Message }
    }
}