在脚本内的函数中使用用户输入

时间:2017-03-08 13:48:08

标签: powershell parameter-passing

我有一个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函数。

2 个答案:

答案 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函数。