Public/Get-CloudDisk.ps1

function Get-CloudDisk {
    <#
        .SYNOPSIS
            Gets managed disks from a selected cloud provider.

        .DESCRIPTION
            Routes disk inventory requests to the matching provider backend and
            returns normalized cloud record objects for the disk surface.

        .EXAMPLE
            Get-CloudDisk -Provider Azure -ResourceGroup 'prod-rg'

            Gets Azure managed disks in a resource group.

        .EXAMPLE
            Get-CloudDisk -Provider AWS -Region 'us-east-1'

            Gets AWS EBS volumes in a region.

        .EXAMPLE
            Get-CloudDisk -Provider GCP -Project 'my-project'

            Gets GCP persistent disks for a project.
    #>

    [CmdletBinding(DefaultParameterSetName = 'Azure')]
    [OutputType([pscustomobject])]
    param(
        # The cloud provider to query.
        [Parameter(ParameterSetName = 'Azure')]
        [Parameter(ParameterSetName = 'AWS')]
        [Parameter(ParameterSetName = 'GCP')]
        [string]$Provider,

        # The Azure resource group containing the target disks.
        [Parameter(Mandatory, ParameterSetName = 'Azure')]
        [ValidateNotNullOrEmpty()]
        [string]$ResourceGroup,

        # The AWS region to query for EBS volumes.
        [Parameter(Mandatory, ParameterSetName = 'AWS')]
        [ValidateNotNullOrEmpty()]
        [string]$Region,

        # The GCP project to query for persistent disks.
        [Parameter(Mandatory, ParameterSetName = 'GCP')]
        [ValidateNotNullOrEmpty()]
        [string]$Project
    )

    process {
        $resolvedProvider = Resolve-CloudProvider -Provider $Provider -ParameterSetName $PSCmdlet.ParameterSetName

        $commandMap = @{
            Azure = 'Get-AzureDiskData'
            AWS   = 'Get-AWSDiskData'
            GCP   = 'Get-GCPDiskData'
        }

        $argumentMap = @{}

        if ($resolvedProvider -eq 'Azure' -and $PSBoundParameters.ContainsKey('ResourceGroup')) {
            $argumentMap.ResourceGroup = $ResourceGroup
        }

        if ($resolvedProvider -eq 'AWS' -and $PSBoundParameters.ContainsKey('Region')) {
            $argumentMap.Region = $Region
        }

        if ($resolvedProvider -eq 'GCP' -and $PSBoundParameters.ContainsKey('Project')) {
            $argumentMap.Project = $Project
        }

        Invoke-CloudProvider -Provider $resolvedProvider -CommandMap $commandMap -ArgumentMap $argumentMap
    }
}