如果我有一个接受多个字符串参数的函数,第一个参数似乎获得分配给它的所有数据,其余参数作为空传入。
一个快速测试脚本:
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之间是一致的,所以很明显,我做错了什么。有人能指出具体是什么吗?
因为这是一个常见的问题,所以我想提一下,PowerShell函数应该使用认可的动词(动词-名词作为函数名)。
名称的动词部分标识cmdlet执行的操作。名称的名词部分标识执行动作的实体。该规则简化了高级PowerShell用户对cmdlet的使用。
此外,你还可以指定参数是否为强制参数以及参数的位置:
function Test-Script
{
[CmdletBinding()]
Param
(
[Parameter(Mandatory=$true, Position=0)]
[string]$arg1,
[Parameter(Mandatory=$true, Position=1)]
[string]$arg2
)
Write-Host "`$arg1 value: $arg1"
Write-Host "`$arg2 value: $arg2"
}
要将参数传递给函数,你可以使用position:
Test-Script "Hello" "World"
或者指定参数名:
Test-Script -arg1 "Hello" -arg2 "World"
你不像在c#中调用函数那样使用圆括号。
我建议在使用多个参数时始终传递参数名,因为这样可读性更好。