Types/OpenPackage.Part/ReadPowerShellData.ps1

<#
.SYNOPSIS
    Reads Part Content as PowerShell Data
.DESCRIPTION
    Reads Package Part Content as a PowerShell Data block
#>

[Reflection.AssemblyMetadata(
    # This should automatically apply to .txt files
    'FilePattern', 
    '\.psd1$'
)]
param(
    # An optional input object
    # If provided, content will be read from this object.
    # If not provided, content will be read from this part.
    [Alias('Input')]
    [PSObject]$InputObject = $null,
 
    # Any options used to read the data.
    [Alias('Options')]
    [Collections.IDictionary]$Option = [Ordered]@{}
)

if (-not $this.ReadText) { return }

$supportedCommands = @(
    if ($option.SupportedCommand) {
        $option.SupportedCommand
    }
    if ($option.SupportedCommands) {
        $option.SupportedCommands
    }    
)

$datablock = [ScriptBlock]::Create("data $(
    if ($supportedCommands) {
        '-supportedCommand'
        "'$($supportedCommands -replace "'","''" -join "','")'"
    }
) {$(
    $this.ReadText($InputObject, $Option)
)}"
)
if ($datablock.Ast.EndBlock.Statements.Count -gt 1) { return }
if ($datablock.Ast.EndBlock.Statements[0] -isnot 
    [Management.Automation.Language.DataStatementAst]
) {
    return
}
if ($datablock.Ast.EndBlock.Statements[0].CommandsAllowed) {
    foreach ($commandMaybeAllowed in $datablock.Ast.EndBlock.Statements[0].CommandsAllowed) {
        if (-not $commandMaybeAllowed) { continue }
        if ($supportedCommands -notcontains "$commandMaybeAllowed") {
            Write-Warning "Unsupported command $commandMaybeAllowed"
            return
        }
    }        
}
& $datablock