Как создать скрипт powershell, который может отображаться для отображения разрешенных значений параметров - PullRequest
1 голос
/ 27 апреля 2019

Мне нужно надежно прочитать разрешенные значения для командлета или скрипта 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

{
    "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"
]

Можно ли как-нибудь аннотировать свои сценарии, чтобы я мог запрашивать разрешенные параметры?

1 Ответ

0 голосов
/ 27 апреля 2019

Вы можете получить информацию о самом скрипте с помощью $MyInvocation.MyCommand.

$MyInvocation.MyCommand.Parameters.Method.Attributes.ValidValues

Информация о внешних файлах скриптов может быть получена следующим образом.

(Get-Command ".\temp.ps1").Parameters.Method.Attributes.ValidValues
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...