当我在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.
我似乎无论做什么都将参数作为一个参数传递(在第一个不是我想要的参数中)...如何确保参数正确传递?!
答案 0 :(得分:2)
根据Lee的评论,您可能需要阅读有关如何在PowerShell中调用函数的信息:
如果将函数调用更改为此,它将按预期工作:
Check-Missing $titi $toto $tata
在第二个示例中,另外,因为您使用的是高级参数,所以可以显式调用它们(允许它们乱序或其他时髦的东西):
Start-App -Arg2 $b -Arg1 $a -Arg3 $c