Private/Get-ToolProperty.ps1
<#
.SYNOPSIS Retrieves the properties of a specified tool. .DESCRIPTION The Get-ToolProperty function retrieves the properties of a specified tool from a given parameter. .PARAMETER Parameter Gets the type from the parameter and returns a tool property object. .EXAMPLE Get-ToolProperty -Parameter "FilePath" Returns a string type property for the FilePath parameter. #> function Get-ToolProperty { [CmdletBinding()] param ( [Parameter( Mandatory, ValueFromPipeline )] $Parameter ) begin { } process { $property = [ordered]@{} switch ($Parameter.ParameterType -as [string]) { { $_ -match "string$|datetime" } { $property.Add("type", "string") } "string[]" { $property.Add("type", "array"), $property.Add("items", @{type = "string" }) } "System.IO.FileInfo" { $property.Add("type", "string") } "psobject" { $property.Add("type", "object") } "System.Object" { $property.Add("type", "object") } "psobject[]" { $property.Add("type", "object"), $property.Add("items", @{type = "object" }) } "System.Object[]" { $property.Add("type", "object"), $property.Add("items", @{type = "object" }) } { $_ -match 'decimal|float|single|int|long' } { $property.Add("type", "number") } { $_ -match 'switch|bool|boolean' } { $property.Add("type", "boolean") } default { $property.Add("type", "object") ; Write-Verbose "Unknown type: $_ - added as object" } } $ValidValues = $Parameter.Attributes.ValidValues if ($property["type"] -and $ValidValues) { $property["enum"] = $ValidValues } if ($Parameter.HelpMessage) { $property["description"] = $Parameter.HelpMessage } } end { if ($property.Count -gt 0) { $property } } } |