我有一个PowerShell脚本,我想用命令行提供的参数执行一个函数:
Param(
[string]$param1
[string]$param2
)
Write-Host $param1
function Run ([string]$param1, [string]$param2){
New $param1
New2 $param2
}
function New ([string]$param1){
Write-Host $param1
}
function new2 ([string]$param2){
Write-Host $param2
}
Run
但它没有用。 Run
功能没有得到我提供的参数:
./script.ps1 -$param1="hello" -$param2="hello2"
功能之外的Write-Host
部分有效。但参数未传递给我的Run
函数。
答案 0 :(得分:2)
您的Run
功能无法正常工作,因为您没有将参数传递给它。
将脚本中的最后一行更新为:
Run -param1 $param1 -param2 $param2
编辑:您编写和使用/链接功能的方式看起来很好。参数名称可能更具描述性,但我认为这是示例代码,因此这可能与您的实际代码无关。
答案 1 :(得分:1)
首先,脚本调用应如下所示:
my-script.ps1 -param1 "hello" -param2 "hello2"
此外,您需要将脚本参数实际传递给Run
函数。可能最好的方法是splat automatic variable $PSBoundParameters
:
Run @PSBoundParameters
话虽如此,是否将主脚本代码包装在一个函数中或多或少是个人意见的问题,以及您打算如何使用该脚本。
Con:您需要复制Run
函数的脚本参数并传递脚本参数。
Pro:它有点干净,因为几乎所有代码都被封装了。此外,如果您有条件地执行Run
函数,它允许您直接调用脚本并将其用作库:
if ($MyInvocation.Line.Split()[0] -ne '.') {
Run @PSBoundParameters
}
这样就可以在脚本dot-sourcing时导入函数,并在执行脚本时使用脚本参数调用Run
函数。