PowerShell函数参数都在第一个参数中传递

PowerShell函数参数都在第一个参数中传递,powershell,Powershell,在PowerShell中运行此代码时: function Check-Missing([String] $arg1, [String] $Arg2, [String] $Arg3) { echo $arg1 echo "----------" echo $arg2 echo "----------" echo $Arg3 } $titi = "123" $toto = "456" $tata = "789" Check-Missing($titi,$t

在PowerShell中运行此代码时:

function Check-Missing([String] $arg1, [String] $Arg2, [String] $Arg3)
{
    echo $arg1
    echo "----------"
    echo $arg2
    echo "----------"
    echo $Arg3
}

$titi = "123"
$toto = "456"
$tata = "789"

Check-Missing($titi,$toto,$tata)
我得到这个输出:

123 456 789
----------

----------
我简直无法控制它:-(这里发生了什么?!等等,它变好了:

function Start-App{

    Param(
    [parameter(Mandatory=$true)]
    [System.Object] $Arg1,
    [System.Object] $Arg2,
    [System.Object] $Arg3 
    )

    echo $arg1
    echo "---"
    echo $arg2
    echo "---"
    echo $Arg3

}

$a = "abc"
$b = "bcd"
$c = "cde"

Start-App($a.ToString(),$b.ToString(),$c.ToString())
该代码为我提供了以下信息:

abc
bcd
cde
---
---
我也试过:

function Start-App{

    Param(
    [parameter(Mandatory=$true)]
    [String] $Arg1,
    [String] $Arg2,
    [String] $Arg3 
    )

    echo $arg1
    echo "---"
    echo $arg2
    echo "---"
    echo $Arg3

}

$a = "abc"
$b = "bcd"
$c = "cde"

Start-App($a.ToString(),$b.ToString(),$c.ToString())
但是这个愚蠢的错误毫无意义,因为我在将变量传递给函数之前将其转换为字符串:

Start-App : Cannot process argument transformation on parameter 'Arg1'. Cannot convert value to type System.String.

似乎无论我做什么,参数都是作为一个参数传递的(在第一个参数中,这不是我想要的)…我如何确保参数正确传递?!

根据Lee的评论,您可能想了解PowerShell中的函数是如何被调用的:

如果将函数调用更改为此,它将按预期工作:

Check-Missing $titi $toto $tata
此外,在第二个示例中,由于您使用的是高级参数,因此可以显式调用它们(允许它们出现故障或其他奇怪的情况):


根据Lee的评论,您可能想了解如何调用PowerShell中的函数:

如果将函数调用更改为此,它将按预期工作:

Check-Missing $titi $toto $tata
此外,在第二个示例中,由于您使用的是高级参数,因此可以显式调用它们(允许它们出现故障或其他奇怪的情况):


powershell在参数列表中不使用逗号作为分隔符,在参数列表周围也不使用
()
。您使用逗号和
()
…这意味着您在第一个位置得到一个数组…而在其他位置一点都没有。[grin]请选择您的问题标题。该标题应解释您遇到的问题或您提出的问题,并对正在筛选搜索结果列表以试图找到问题解决方案的本网站未来用户有意义。您当前的标题不包含任何相关内容;唯一有意义的词是Powershell,它已经是您通过添加的Powershell标记提供的信息。Powershell在参数列表中不使用逗号作为分隔符,也不在参数列表周围使用
()
。您使用逗号和
()
…这意味着您在位置一处获得一个数组…而在其他位置则完全没有。[咧嘴笑]请选择您的问题标题。该标题应解释您遇到的问题或您提出的问题,并对正在筛选搜索结果列表以试图找到问题解决方案的本网站未来用户有意义。您当前的标题不包含任何相关内容;唯一有意义的词是Powershell,它已经是您通过添加的Powershell标记提供的信息。