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

时间:2020-05-19 22:28:04

标签: 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,$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.

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

1 个答案:

答案 0 :(得分:2)

根据Lee的评论,您可能需要阅读有关如何在PowerShell中调用函数的信息:

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_functions?view=powershell-7

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

Check-Missing $titi $toto $tata

在第二个示例中,另外,因为您使用的是高级参数,所以可以显式调用它们(允许它们乱序或其他时髦的东西):

Start-App -Arg2 $b -Arg1 $a -Arg3 $c
相关问题