Private/Get-GCPTagData.ps1

function Get-GCPTagData {
    [CmdletBinding()]
    [OutputType([GCPTagRecord])]
    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
    } else {
        $null
    }

    [GCPTagRecord]::FromGCloudLabels($labels, $resolvedProject, $Resource)
}