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

一个快速测试脚本:

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之间是一致的,所以很明显,我做错了什么。有人能指出具体是什么吗?


当前回答

我刚才说过:

常见的问题是使用单数形式$arg,这是不正确的。它应该总是复数形式的$args。

问题不在于此。事实上,$arg可以是其他任何东西。问题在于逗号和圆括号的使用。

我运行以下代码,工作和输出如下:

代码:

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

测试“ABC”“DEF”

输出:

$var1 value: ABC
$var2 value: DEF

其他回答

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

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

Test "ABC" "DEF"

我刚才说过:

常见的问题是使用单数形式$arg,这是不正确的。它应该总是复数形式的$args。

问题不在于此。事实上,$arg可以是其他任何东西。问题在于逗号和圆括号的使用。

我运行以下代码,工作和输出如下:

代码:

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

测试“ABC”“DEF”

输出:

$var1 value: ABC
$var2 value: DEF

如果你是c# / Java / c++ / Ruby / Python /自本世纪选择一种语言的开发人员,你想用逗号调用你的函数,因为这是你一直在做的,那么你需要这样的东西:

$myModule = New-Module -ascustomobject { 
    function test($arg1, $arg2) { 
        echo "arg1 = $arg1, and arg2 = $arg2"
    }
}

现在电话:

$myModule.test("ABC", "DEF")

你们会看到

arg1 = ABC, and arg2 = DEF

你也可以像这样在函数中传递参数:

function FunctionName()
{
    Param ([string]$ParamName);
    # Operations
}