Powershell. Как передать аргументы скрипта в параметры функции из этого скрипта, без учёта порядка параметров?
В файле Powershell есть скрипт, внутри которого есть функция:
Function Test ($Content,$Out,[switch]$AsText) {
$PSBoundParameters
}
Эта функция используется с разными параметрами в некоторых операция самого скрипта, но также её можно вызвать из скрипта напрямую с помощью аргумента скрипта "test":
if ($args[0] -match "^test$") {
Test "D:\123.txt" -AsText
}
В этом первом случае функции передаётся значение параметра Content без названия этого параметра ("D:\123.txt"), просто потому, что этот параметр всегда передаётся первым. Затем передаётся параметр AsText без значения (потому что это тип Switch). В отличие от первого параметра, этот определяется не по порядку параметров функции (потому что по порядку он третий, а задано только два параметра), а по названию этого параметра AsText. Второй же параметр функции, Out - не передаётся и он остаётся пустым. Результат выполнения функции правильный:
Key Value
--- -----
AsText True
Content D:\123.txt
Но во втором случае я хочу аругментом test просто вызвать ту самую функцию без каких-либо других обработок сприптом и передать в неё оставшиеся аргументы скрипта, например, так:
if ($args[0] -match "^test$") {
Test $args[1] $args[2] $args[3]
}
Ну или так, если всего аргументов больше 4, это не столь важно:
if ($args[0] -match "^test$") {
$delimeter = '>1_3>'
$arguments = $args -join $delimeter -replace ("^"+[Regex]::Escape($args[0]+$delimeter)),'' -split $delimeter
Test @arguments
}
В последнем случае вызова функции используется splatting. В итоге в обоих случаях $args[0] не передаётся в функцию, потому что он вызывает саму эту функцию, в функцию передаются оставшиеся аргументы скрипта. Затем я вызываю скрипт с соответствующими аргументами:
.\test.ps1 test "D:\123.txt" -AsText
Однако результат получается другой:
Key Value
--- -----
Content D:\123.txt
Out -AsText
То есть параметр AsText не распознался по имени параметра, вместо этого он стал значением параметра Out, который идёт вторым в функции.
Вопрос: Как правильно заставить скрипт работать во втором случае также, как это происходит в первом случае? То есть как правильно вызывать функцию скрипта с передачей ей параметров из оставшихся аргументов самого скрипта, чтобы передаваемые параметры определялись не только по порядку, но и по названию параметров тоже, как это происходит при указании этих параетров непосредственно в скрипте (Test "D:\123.txt" -AsText)?
P.S. Примеры кода максимально упрощены для понимания, от чего могут выглядеть не логичными.