GinShell.Azure/Public/Enable-GsAzureSnapshotPublicAccess.ps1

function Enable-GsAzureSnapshotPublicAccess {
    param (
        [Parameter(Mandatory = $true)]
        [object[]]$Snapshot
    )

    try {
        if ($Snapshot.PublicNetworkAccess -eq 'Enabled') {
            Write-GsLog -Message "Public network access is already enabled for snapshot '$($Snapshot.Name)'" -Type Success
            return
        }

        Write-GsLog -Message "Enabling public network access for snapshot '$($Snapshot.Name)'" -Type Action

        $uri = "/subscriptions/$($Snapshot.Id.Split('/')[2])/resourceGroups/$($Snapshot.ResourceGroupName)/providers/Microsoft.Compute/snapshots/$($Snapshot.Name)?api-version=2022-03-02"

        $payload = @{
            properties = @{
                PublicNetworkAccess = 'Enabled'
                NetworkAccessPolicy = 'AllowAll'
            }
        } | ConvertTo-Json -Depth 5

        $out = Invoke-AzRestMethod -Method PATCH -Path $uri -Payload $payload

        Write-GsLog -Message "Public access successfully enabled for snapshot '$($Snapshot.Name)'" -Type Success
    }
    catch {
        Write-GsLog -Message "Failed to enable public access: $($_.Exception.Message)" -Type Error
    }
}