Functions/Test-AdbItemValidation.ps1
<#
.SYNOPSIS Test an item against a template schema. .DESCRIPTION This command will invoke the built-in validation to test the specified item against the template. .INPUTS Item names. .EXAMPLE PS C:\> Test-AdbValidation -Template 'mytemplate' -Name 'myitem' Test the item 'myitem' against the template 'mytemplate'. #> function Test-AdbItemValidation { [CmdletBinding()] param ( # The adb session. [Parameter(Mandatory = $false)] [PSTypeName('Adb.Session')] [System.Object] $Session, # The name of the template to test against. [Parameter(Mandatory = $true)] [System.String] $Template, # Item name to validate. [Parameter(Mandatory = $true, ValueFromPipeline = $true)] [System.String[]] $Name, # If specified, no result object is returned. If the item is valid, # nothing is returned. If the item is invalid, a error is thrown. [Parameter(Mandatory = $false)] [switch] $Quiet ) begin { $Session = Test-AdbSession -Session $Session } process { foreach ($currentName in $Name) { try { Write-Verbose "Test item $currentName against $Template" $uri = '{0}/templates/{1}/validate/{2}' -f $Session.Uri, $Template, $currentName $requestSplat = Get-AdbSessionRequestSplat -Session $Session -Method 'Get' Invoke-RestMethod @requestSplat -Uri $Uri -ErrorAction Stop | Out-Null $result = [PSCustomObject] @{ Result = $true Message = '' Violations = @() } } catch { $errorMessage = $_.ErrorDetails.Message | ConvertFrom-Json | Select-Object -ExpandProperty 'error' if ([System.String]::IsNullOrEmpty($errorMessage)) { $errorMessage = $_.ErrorDetails.Message } $result = [PSCustomObject] @{ Result = $false Message = $errorMessage Violations = $errorMessage.Split(([System.String[]] ', '), [System.StringSplitOptions]::None) } } if ($Quiet.IsPresent) { if (-not $result.Result) { throw $result.Message } } else { Write-Output $result } } } } |