То, как вы пытаетесь вызвать функцию, не работает, потому что вы передаете аргументы скрипту, но никогда ничего с ними не делаете.Если вы хотите, чтобы функция вызывалась автоматически при запуске сценария, вызовите функцию из сценария.
function Write-IniFile {
Param(
...
)
...
}
Write-IniFile -FilePath C:\Users\file.ini -a Name -b Joyce -c 1309
и запустите сценарий следующим образом:
PS.ps1
В противном случае точка-Исходный код сценария перед вызовом функции:
. PS.ps1
Write-IniFile -FilePath C:\Users\file.ini -a Name -b Joyce -c 1309
Если вы хотите иметь возможность запустить сценарий с параметрами и передать их в функцию, используйте первый подход, но в функции выполните сплат $args
:
function Write-IniFile {
Param(
...
)
...
}
Write-IniFile @args
и вызовите скрипт следующим образом:
PS.ps1 -FilePath C:\Users\file.ini -a Name -b Joyce -c 1309
Редактировать:
Если у вас есть скрипт с несколькими функциямии хотите иметь возможность вызывать любого из них, запустив скрипт, который вы могли бы split'n'splat параметры скрипта:
PS.ps1
:
function Foo {
Param(
[Parameter(Mandatory=$true)]
$x
)
...
}
function Bar {
Param(
[Parameter(Mandatory=$true)]
$y,
[Parameter(Mandatory=$true)]
$z
)
...
}
$cmd, $params = $args
& $cmd @params
Вызов:
PS.ps1 Foo -x 'some' # invoke Foo() with the given arguments
PS.ps1 Bar -y 'or' -z 'other' # invoke Bar() with the given arguments
Оператор
$cmd, $params = $args
назначает первый аргумент переменной $cmd
, а остальные аргументы - переменной $params
.Следующий оператор
& $cmd @params
вызывает $cmd
через оператор вызова (&
) и splats параметры в $params
.