Привязать функцию PowerShell к параметру - PullRequest
0 голосов
/ 18 ноября 2018

Возможно ли в PowerShell (или даже лучше в PowerShell Core) привязать функцию к параметру ValidateSet, указанному в сценарии?

Я хочу связать параметры параметров a, b и c с функциями a_function b_function и c_function с переменной $firstcmd или $secondcmd. Поэтому, если скрипт вызывается

PS C:\ script.ps1 a

функция a запущена.

если скрипт вызывается

PS C:\ script.ps1 a b

функции a и b запущены.

Определение параметра при запуске скрипта выглядит так:

param([Parameter(Mandatory=$false)][String][ValidateSet('a',
                                                        'b',
                                                        'c')$firstcmd,
      [Parameter(Mandatory=$false)][String][ValidateSet('a',
                                                        'b', 
                                                        'c')$secondcmd,
     )

function a_function {
    Write-Host "Hello a"
}

function b_function  {
    Write-Host "Hello b"
}

function c_function  {
    Write-Host "Hello c"
}

# here the "command option to function mapping" magic should happen

1 Ответ

0 голосов
/ 18 ноября 2018

Это может быть решено с помощью оператора Switch для вызова определенной функции, но я думаю, что вы ищете, это более элегантный поиск.Одним из возможных вариантов является хеш-таблица + оператор вызова (&):

param([Parameter(Mandatory=$false)][String][ValidateSet('a',
                                                        'b',
                                                        'c')] $firstcmd,
      [Parameter(Mandatory=$false)][String][ValidateSet('a',
                                                        'b', 
                                                        'c')] $secondcmd
     )

function a_function {
    Write-Host "Hello a"
}

function b_function  {
    Write-Host "Hello b"
}

function c_function  {
    Write-Host "Hello c"
}

#hash table:
$ParamToFunction = @{
    a = "a_function"
    b = "b_function"
    c = "c_function"
}

#function calls:
& $ParamToFunction[$firstcmd]
& $ParamToFunction[$secondcmd]

Конечно, будет выдано сообщение об ошибке, если вы не укажете значение для какого-либо параметра - я оставляю это вам для обработкитакие случаи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...