Public/Get-PsdError.ps1
|
function Get-PsdError { <# .SYNOPSIS Returns the problems Test-Psd would find, as objects. .DESCRIPTION Each object has Code, File, Line, Column, Key and Message. With -InputObject, checks an object already in memory against -Schema. .PARAMETER Include Maps from the caller, by name, read with !<name::Key>. See Import-Psd. .EXAMPLE Get-PsdError ./app.psd1 -Schema ./app.schema.psd1 .EXAMPLE Get-PsdError -InputObject $config -Schema ./app.schema.psd1 #> [CmdletBinding(DefaultParameterSetName = 'File')] param( [Parameter(Mandatory, Position = 0, ParameterSetName = 'File', ValueFromPipeline, ValueFromPipelineByPropertyName)] [Alias('FullName')] [string] $Path, [Parameter(Mandatory, ParameterSetName = 'Object')] [object] $InputObject, [Parameter(ParameterSetName = 'File')] [Parameter(Mandatory, ParameterSetName = 'Object')] [string] $Schema, [Parameter(ParameterSetName = 'File')] [object] $Override, [Parameter(ParameterSetName = 'File')] [System.Collections.IDictionary] $Include, [Parameter(ParameterSetName = 'File')] [switch] $Raw, [System.Collections.IDictionary] $Limits ) process { if ($PSCmdlet.ParameterSetName -eq 'Object') { $ctx = New-PsdContext -Limits $Limits $rules = Import-PsdSchemaRules (Resolve-PsdUserPath $Schema) $ctx $null if ($rules) { Test-PsdValueRule (Copy-PsdPlain $InputObject) $null $rules '' $ctx $null } } else { $r = Invoke-PsdLoad -Path $Path -Schema $Schema -Override $Override -Include $Include -Raw:$Raw -Limits $Limits $ctx = $r.Ctx } foreach ($e in $ctx.Errors) { ConvertTo-PsdErrorObject $e } } } |