Список аргументов Powershell передается как -a <список аргументов> -d <список аргументов> - PullRequest
2 голосов
/ 26 августа 2011

Я хочу написать скрипт powershell ps1, которому нужно 2 набора аргументов (-a -d), и каждый из них может иметь до n атрибутов.Как это реализовать?

example : DoTheTask -a <task name 1> <task name 2> ...  -d <machine name 1> <machine name 2>...

Ответы [ 3 ]

6 голосов
/ 26 августа 2011

Вы можете сделать это:

param(
    [string[]]$a,   
    [string[]]$d
)

write-host $a
write-host ----
write-host $d

Тогда вы можете позвонить DoTheTask -a task1,task2 -d machine1,machine2

0 голосов
/ 29 августа 2011

Если вы передаете эти аргументы самому сценарию, вы можете использовать внутреннюю переменную $args, хотя сопоставление ключ / значение будет немного сложнее, поскольку PowerShell будет интерпретировать каждый оператор как аргумент. Я предлагаю (как и другие) использовать другой разделитель, чтобы упростить сопоставления.

Тем не менее, если вы хотите продолжить делать это таким образом, вы можете использовать функцию, подобную приведенной ниже:

 Function Parse-Arguments {
    $_args = $script:args                                # set this to something other than $script:args if you want to use this inside of the script.
    $_ret  = @{}         
    foreach ($_arg in $_args) {
        if ($_arg.substring(0,1) -eq '-') {
            $_key = $_arg; [void]$foreach.moveNext()     # set the key (i.e. -a, -b) and moves to the next element in $args, or the tasks to do for that switch
            while ($_arg.substring(0,1) -ne '-') {       # goes through each task until it hits another switch
                $_val = $_arg
                switch($_key)    {
                     '-a'     {
                          write-host "doing stuff for $_key"
                          $ret.add($_key,$_val)          # puts the arg entered and tasks to do for that arg.
                     }

                     # put more conditionals here
                }
            }
        }
    }
 }
0 голосов
/ 26 августа 2011

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

Другими словами, может ли ваш аргумент -a быть строкой с запятой-имена разделенных задач и ваш аргумент -d - это строка имен машин, разделенных запятыми?Если это так, то все, что вам нужно сделать, это проанализировать строку в ее компонентах в начале вашего скрипта.

...