Public/PackerFile.ps1

function PackerFile {
    [CmdletBinding()]
    param(
        [Parameter( Mandatory = $true)]
        [string]$Name,

        [Parameter( Mandatory = $true)]
        [scriptblock]$Script
    )
    $Script:ThisPackerInfo = [pscustomobject]@{
        JsonBaseName = "$Name.json"
        Source = $null
        Destination = $null
    }

    $Script:ThisPackerFile = [pscustomobject]@{
        builders = @()
        provisioners = @()
        'post-processors' = @()
        variables = @{}
    }

    . $Script

    $Script:ThisPackerFile |
        Out-JsonFile -Path $Script:ThisPackerInfo.Destination -FileName $Script:ThisPackerInfo.JsonBaseName
}