如果我有一个接受多个字符串参数的函数,第一个参数似乎获得分配给它的所有数据,其余参数作为空传入。

一个快速测试脚本:

Function Test([string]$arg1, [string]$arg2)
{
    Write-Host "`$arg1 value: $arg1"
    Write-Host "`$arg2 value: $arg2"
}

Test("ABC", "DEF")

生成的输出为

$arg1 value: ABC DEF
$arg2 value: 

正确的输出应该是:

$arg1 value: ABC
$arg2 value: DEF

这似乎在多台机器上v1和v2之间是一致的,所以很明显,我做错了什么。有人能指出具体是什么吗?


当前回答

Function Test([string]$arg1, [string]$arg2)
{
    Write-Host "`$arg1 value: $arg1"
    Write-Host "`$arg2 value: $arg2"
}

Test("ABC") ("DEF")

其他回答

在PowerShell(所有版本)中,函数调用中的参数是用空格分隔的,而不是逗号分隔的。此外,括号完全没有必要,如果Set-StrictMode -Version 2或更高版本激活,将在PowerShell 2.0(或更高版本)中导致解析错误。带圆括号的参数只在. net方法中使用。

function foo($a, $b, $c) {
   "a: $a; b: $b; c: $c"
}

ps> foo 1 2 3
a: 1; b: 2; c: 3

我不知道你在用这个函数做什么,但看看使用'param'关键字。它在向函数传递参数方面更加强大,并使其更加用户友好。下面是来自微软的一篇过于复杂的文章的链接。这并不像文章说的那么复杂。

参数的使用

另外,这里有一个来自这个网站的问题:

来看看。

Function Test([string]$arg1, [string]$arg2)
{
    Write-Host "`$arg1 value: $arg1"
    Write-Host "`$arg2 value: $arg2"
}

Test("ABC") ("DEF")

如果你尝试:

PS > Test("ABC", "GHI") ("DEF")

你会得到:

$arg1 value: ABC GHI
$arg2 value: DEF

你可以看到括号分隔了参数


如果你尝试:

PS > $var = "C"
PS > Test ("AB" + $var) "DEF"

你会得到:

$arg1 value: ABC
$arg2 value: DEF

现在您可以发现括号的一些直接用处—空格不会成为下一个参数的分隔符—相反,您有一个eval函数。

Function Test {
    Param([string]$arg1, [string]$arg2)

    Write-Host $arg1
    Write-Host $arg2
}

这是一个正确的params声明。

看到about_Functions_Advanced_Parameters。

它确实有效。