Private/Start-GCPInstance.ps1

function Start-GCPInstance {
    [Diagnostics.CodeAnalysis.SuppressMessageAttribute(
        'PSUseShouldProcessForStateChangingFunctions',
        '',
        Justification = 'This internal helper is invoked only by Start-CloudInstance, which implements ShouldProcess.'
    )]
    [CmdletBinding()]
    [OutputType([GCPCloudRecord])]
    param(
        [Parameter(Mandatory)]
        [string]$Name,

        [Parameter(Mandatory)]
        [string]$Zone,

        [string]$Project
    )

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

    $null = Invoke-GCloudJson -Arguments @(
        'compute', 'instances', 'start', $Name,
        "--zone=$Zone",
        "--project=$resolvedProject"
    )

    $record = [GCPCloudRecord]::new()
    $record.Kind = 'Instance'
    $record.Provider = [CloudProvider]::GCP.ToString()
    $record.Name = $Name
    $record.Region = $Zone
    $record.Status = 'Starting'
    $record.Project = $resolvedProject
    $record.Zone = $Zone
    $record.Metadata = @{
        Project = $resolvedProject
        Zone    = $Zone
    }

    return $record
}