2016-03-15 2 views
2

Я хочу создать сценарий powershell, который принимает динамические параметры, и я также хочу, чтобы итерации через них.Как передать динамические параметры сценарию powershell и перебрать список?

например: Я вызываю сценарий powershell следующим образом.

ParametersTest.ps1 -param1 value1 -param2 value2 -param3 value3 

И я должен быть в состоянии получить доступ к моему Params внутри сценария следующим образом:

for($key in DynamicParams) { 
    $paramValue = DynamicParams[$key]; 
} 

Есть в любом случае сделать это в PowerShell? Заранее спасибо.

ответ

2

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

$DynamicParams = @{} 
switch -Regex ($args) { 
    '^-' { 
    # Parameter name 
    if ($name) { 
     $DynamicParams[$name] = $value 
     $name = $value = $null 
    } 
    $name = $_ -replace '^-' 
    } 
    '^[^-]' { 
    # Value 
    $value = $_ 
    } 
} 
if ($name) { 
    $DynamicParams[$name] = $value 
    $name = $value = $null 
} 

перебрать динамические параметры, которые вы можете сделать что-то, как вы написали

foreach ($key in $DynamicParams.Keys) { 
    $value = $DynamicParams[$key] 
} 

(обратите внимание на foreach, не for, последний из которых не может работать так, как вы его написали) или просто итерации по хеш-таблице:

$DynamicParams.GetEnumerator() | ForEach-Object { 
    $name = $_.Key 
    $value = $_.Value 
}