Powershell - установите необязательный параметр, и пусть другие параметры будут в его положении (0) - PullRequest
0 голосов
/ 18 апреля 2020

Как сделать параметр необязательным, но если первый параметр ($options) не указан, тогда используйте следующий параметр ($controller_id) в позиции 0.

Вариант использования параметра $option очень ограничен , Я не хочу использовать два разных сценария для предоставления $options, а затем другой сценарий для $controller_id.$objects

Возможно ли это?

Сценарий вызывается двумя способами. Первый раз он позвонит с $options (каждый 1 час). Затем каждые 5 минут скрипт вызывается с $controller_id и $object.

. Во время каждых 5 минут скрипта вызов $options не будет указан, и только $controller_id и $object указано. Вот почему я хочу, чтобы скрипт работал нормально, когда $options не указан

param(
   [Parameter(Mandatory=$false,Position=0)]
   [ValidateSet( 'Controllers', 'test1')]
   [String]$options = $null,
   [Parameter(Mandatory=$false,Position=0)]
   [String]$controller_id,
   [Parameter(Mandatory=$false,Position=1)]
   [String]$object
)

if ($options -eq "Controllers") {
   callfunction1
}
else if ($options -eq "test1") {
   callfunction2
}
else if ( ($controller_id) -and $object -eq "something") {
    callsomething.$object | where {$_ -eq "$controller_id" }
}

1 Ответ

0 голосов
/ 19 апреля 2020

Глядя на сценарий, ValidateSet не требуется, поскольку вы принимаете любую строку в параметре controller_id .

Вместо этого вы можете захотеть посмотреть на обходные пути, например, изменение того, как ваш If оператор настроен

Вот пример

Function Test{
    param(
        [Parameter(Mandatory=$true,Position=0)]
        [String]$options,
        [Parameter(Mandatory=$false,Position=1)]
        [object]$object = $null
    )

    if ($object -ne $null) {
        "callsomething.$object | where {$_ -eq ""$options""}"
    }
    elseif ($options -eq "test1") {
       "callfunction2"
    }
    elseif ($options -eq "Controllers") {
       "callfunction1"
    }else{
        throw "You must choose between Controllers or test1"
    }
}

#Lets run some Tests

Test "Controllers"

Test "test1"

Test "Controllers" "ABC"

Test "test1" "adw"

И результаты

callfunction1
callfunction2
callsomething.ABC | where { -eq "Controllers"}
callsomething.adw | where { -eq "test1"}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...