В PowerShell, возможно ли обеспечить принудительное именование аргументов? - PullRequest
3 голосов
/ 27 января 2011

С учетом скрипта foo.ps1: param ($ x, $ y) return $ x / $ y

Возможно ли принудительное явное именование параметров при его вызове?

. /foo.ps1 5 10 выдаст ошибку ./foo.ps1 -x 5 -y 10 будет в порядке

Ответы [ 3 ]

4 голосов
/ 27 января 2011

Этот код работает, но он использует что-то недокументированное (я не смог найти ничего о отрицательных позициях):

function Test
{
    param(
        [Parameter(Position=-1)]
        $x
        ,
        [Parameter(Position=-1)]
        $y
    )
    $x/$y
}

Test -x 1 -y 2
Test -y 2 -x 1
Test 1 2

Вывод:

0.5
0.5
Test : Cannot bind positional parameters because no names were given.
At C:\TEMP\_110127_170853\q1.ps1:15 char:5
4 голосов
/ 27 января 2011

Если вы определяете позицию с помощью свойства позиции функции продвижения PowerShell V2, все параметры по умолчанию становятся непозиционными, если только свойство позиции не указано для других параметров (источник: PowerShell In Action 2nd стр. 296). Так что вы можете сделать это:

function Test-Args
{
    param(
    [parameter(Position=0)] $dummy,
    $x,
    $y
    )
    $x/$y
}
0 голосов
/ 27 января 2011

Я собираюсь пойти с этим для foo.ps1. Если кому-то не удастся явно использовать -dummy1 или -dummy2 для указания аргументов, все должно работать нормально.

param($dummy1,$x,$y,$dummy2)
if (!$x -or !$y -or $dummy1 -or $dummy2){
"Error: specify -x and -y explicitly"
}
else {$x/$y}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...