Private/Get-GCPTagData.ps1

function Get-GCPTagData {
    [CmdletBinding()]
    param(
        [string]$Project,
        [string]$Resource
    )

    $null = Assert-GCloudAuthenticated
    $resolvedProject = Get-GCloudProject -Project $Project

    # Resource is in the form "instances/vm-01" or "disks/my-disk"
    $parts = $Resource -split '/', 2
    $resourceType = $parts[0]
    $resourceName = if ($parts.Count -gt 1) { $parts[1] } else { $Resource }

    # List resources filtered by name to avoid requiring a zone argument
    $resourceList = Invoke-GCloudJson -Arguments @(
        'compute', $resourceType, 'list',
        "--filter=name=$resourceName",
        "--project=$resolvedProject"
    )

    $resourceData = $resourceList | Select-Object -First 1

    $labels = @{}
    if ($resourceData -and $resourceData.labels) {
        $resourceData.labels.PSObject.Properties | ForEach-Object {
            $labels[$_.Name] = $_.Value
        }
    }

    ConvertTo-CloudRecord `
        -Name $resourceName `
        -Provider GCP `
        -Metadata @{
            Project  = $resolvedProject
            Resource = $Resource
            Labels   = $labels
        }
}