pf-Pson.ps1

function ConvertFrom-Pson {
    param (
        [Parameter(ValueFromPipeline=$true)]
        [string]$value,
        [switch]$ForceOrderedHashTables
    )
    process {
        # Ensure Hashtables are ordered so items wonn't change order when updating the file
        if ($ForceOrderedHashTables) {
            $value = $value.Replace('[ordered]@{','@{').Replace('@{','[ordered]@{')
        }
        $sb = [scriptblock]::Create($value)
        $result = $sb.InvokeReturnAsIs()
        return $result
    }
}

function ConvertTo-Pson {
    [CmdletBinding()]
    param (
        [Parameter(ValueFromPipeline=$true)]
        $data
    )
    process {
        $result = ConvertTo-Expression $data -IndentChar ' ' -Indentation 2

        # Remove unnecesary quotes on Hashtable keys
        $pretty = $result -replace '(?smi)(?<s>^|@{)(?<ident>\s*)''(?<name>\w+)''\s*=',
          { $_.Groups['s'].value + $_.Groups['ident'].value + $_.Groups['name'].value  + " =" } 

        return  $pretty
    }
}

Import-Script_AsModule -ScriptName ConvertTo-Expression -Global `
    -RequiredVersion 3.3.0 -WhenNotDefined ConvertTo-Expression