Мне нужно надежно прочитать разрешенные значения для командлета или скрипта PowerShell.Например, допустимые значения параметра Method
для Invoke-RestMethod
: "Get", "Head", "Post",
... и т. Д.
. Таким образом, мои сценарии помечаются ValidateSet
:
param(
[Parameter()]
[ValidateSet("GET", "POST")]
[string]$Method="GET"
)
Проблема в том, что я могу использовать Get-Help для запроса этих значений для командлетов, таких как Invoke-RestMethod
, но не для своих собственных сценариев.
Вот вывод $cmd = Get-Help -Full Invoke-RestMethod
, глядя на $cmd.syntax.syntaxItem[0].parameter[1].parameterValueGroup.parameterValue
![enter image description here](https://i.stack.imgur.com/2qxVy.png)
{
"name": "Method",
"required": "false",
"pipelineInput": "false",
"isDynamic": "false",
"parameterSetName": "(All)",
"parameterValue": {
"value": "WebRequestMethod",
"variableLength": false,
"required": "true"
},
"type": {
"name": "WebRequestMethod"
},
"position": "Named",
"aliases": "None",
"parameterValueGroup": {
"parameterValue": [
"Default",
"Get",
"Head",
"Post",
"Put",
"Delete",
"Trace",
"Options",
"Merge",
"Patch"
]
}
}
Следующий скрипт допускает "GET"
и "POST"
в качестве параметра Method
, но Get-Help это не отражает.
<#
.Synopsis
Foo
.Parameter Method
Something about method
#>
[CmdletBinding()]
param(
[Parameter()]
[ValidateSet("GET", "POST")]
[string]$Method="GET"
)
Теперь, если я попытаюсь получить допустимые значения "GET" и "POST":
Set-StrictMode -Off
# 1. Self-reflect
$me = Get-Help .\tmp.ps1 -Full
$me | convertto-json -depth 10 > tmpOP1.json
$methodParamMe = $me.Syntax.syntaxItem[0].parameter | Where-Object Name -eq "Method"
if ($methodParamMe.parameterValueGroup.parameterValue -eq $null) {
"My ValidateSet is missing!"
} else {
$methodParam.parameterValueGroup.parameterValue
}
# 2. Look at Invoke-Webreq
$cmd = Get-Help Invoke-RestMethod -Full
$cmd | convertto-json -depth 10 > tmpOP2.json
$methodParamIWR = $cmd.Syntax.syntaxItem[0].parameter | Where-Object Name -eq "Method"
$methodParamIWR | convertto-json -depth 10 > tmpOP3.json
if ($methodParamIWR.parameterValueGroup.parameterValue -eq $null) {
"Invoke-RestMethod has no ValidateSet"
} else {
"Invoke-RestMethod has the set of allowed values!"
$methodParamIWR.parameterValueGroup.parameterValue | ConvertTo-Json
}
Вывод:
My ValidateSet is missing!
Invoke-RestMethod has the set of allowed values!
[
"Default",
"Get",
"Head",
"Post",
"Put",
"Delete",
"Trace",
"Options",
"Merge",
"Patch"
]
Можно ли как-нибудь аннотировать свои сценарии, чтобы я мог запрашивать разрешенные параметры?