使用循环将参数传递给函数

时间:2017-05-30 13:12:13

标签: function powershell for-loop parameters parameter-passing

我有一个功能

Function newFunction($1, $2, $3)
{
    $1 + $2 + $3
}

Param (
    [string]$intro= 'My Name is ',
    [string]$name= 'Mark. ',
    [string]$greeting= 'Hello'
    )

它可以运行。     newFunction $ intro $ name $ greeting

导致。     我的名字叫马克。你好

我想要做的是存储多个Params并将它们传递给函数的某种方式(下一部分中的这种语法可能是错误的,但希望你明白这一点。

Param ({
    [string]$intro= 'My Name is ',
    [string]$name= 'Mark. ',
    [string]$greeting= 'Hello'
    }{
    [string]$intro= 'My Name is ',
    [string]$name= 'not Mark. ',
    [string]$greeting= 'Howdy!'
    }

我怎么能得到一个for循环传递其中的每一个来打印     我的名字叫马克。你好     我的名字不是马克。你好!

我感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

让我们从一个完整的函数定义开始:

function New-Greeting
{
    param(
        [string]$Intro = "My name is:",
        [string]$Name = "Mark",
        [string]$Greeting = "Hello!"
    )

    return "$Greeting $Intro $Name"
}

然后,您需要将参数参数从调用范围传递给函数,而不是在函数定义中。

例如,变量Name参数值:

$Names = "Mark","John","Bobby"
foreach($Name in $Names){
    New-Greeting -Name $Name
}

将返回:

Hello! My name is: Mark
Hello! My name is: John
Hello! My name is: Bobby

如果你想要多组变量参数,可以考虑将它们存储在哈希表中,然后将它们展开,如下所示:

# Define array of hashtables
$GreetingArguments = @(
    @{
        Intro = "They call me"
        Name = "Mark"
        Greeting = "Howdy!"
    },@{
        Name = "John"
        Greeting = "Good morning!"
    },@{
        Intro = "I go by: "
        Name = "Bobby"
    }
)

foreach($Greeting in $GreetingArguments){
    # "splat" the individual hashtables from the array
    New-Greeting @Greeting
}

导致:

Howdy! They call me Mark
Good morning! My name is: John
Hello! I go by: Bobby

如您所见,只要您 传递参数,New-Greeting默认为param()块中定义的字符串