internal/functions/New-SchemaJsonTemplate.ps1
<#
.SYNOPSIS Creates a new PowerShell object based on a JSON schema URI. .DESCRIPTION The `New-SchemaJsonTemplate` function generates a PowerShell object for use as a template from a specified JSON schema URI. It can also generate a blank template JSONC file if required. .PARAMETER JsonSchemaUri The URI of the JSON schema to be used for generating the PowerShell object for use as a template. This parameter is mandatory. .PARAMETER Output The path to the output directory where the generated files will be saved. This parameter is optional and defaults to "./Output". .PARAMETER SuppressReturn A switch parameter that, if specified, suppresses the return of the generated PowerShell object. .PARAMETER SuppressFileCreation A switch parameter that, if specified, suppresses the creation of the blank template JSONC file. .EXAMPLE ```powershell New-SchemaJsonTemplate -JsonSchemaUri "https://raw.githubusercontent.com/Azure/enterprise-azure-policy-as-code/main/Schemas/policy-documentation-schema.json" #> function New-SchemaJsonTemplate { [CmdletBinding()] param ( [Parameter(Mandatory = $true)] [string] $JsonSchemaUri, [Parameter(Mandatory = $false)] [string] $Output = "./Output", [switch] $SuppressReturn, [switch] $SuppressFileCreation ) $InformationPreference = "Continue" $outputPath = $(Join-Path $Output (Get-Date -Format "yyyy-MM-dd") policyDocumentations) if (!(Test-Path -Path $outputPath)) { $null = New-Item -Path $path -ItemType Directory -Force } # Gather JSON schema from URI Write-Information "Gathering latest $(Split-Path $JsonSchemaUri -LeafBase) schema..." $jsonSchema = Invoke-RestMethod -Uri $JsonSchemaUri | ConvertTo-json -Depth 100 | ConvertFrom-Json -Depth 100 -AsHashtable # Generate PSObject based on JSON schema $psObject = New-PSObjectFromSchema -Schema $jsonSchema # Return the generated PSObject Write-Information "Testing Schema" try { $psObject | ConvertTo-Json -Depth 100 | Out-Null } catch { Write-Error "The schema is not valid. Please check the schema and try again." return } if (!($SuppressFileCreation)) { # Generate blank template JSONC file Write-Information "Generating Blank Template JSONC file at $(Join-Path ($outputPath) blankTemplate.jsonc)..." $psObject | ConvertTo-Json -Depth 100 | Out-File -FilePath $(Join-Path ($outputPath) $( -join ((Split-Path $JsonSchemaUri -LeafBase), '-blankTemplate.jsonc'))) -Force } if ($SuppressReturn) { return } else { return $psObject } } |