Function Powershell函数在仅显式返回一个参数时返回所有参数
我试图通过创建一些函数来简化我编写的脚本,但是,我似乎无法让它们按我想要的方式工作 示例函数将接受2个或多个参数,但仅返回1个值。当我这样做时,它会返回每个值,在本例中是传递给函数的所有参数(本例中为2) 我从一些研究中了解到,Powershell返回的值比显式调用的要多,这有点令人困惑,因此我尝试了一些建议,将这些其他值分配给Function Powershell函数在仅显式返回一个参数时返回所有参数,function,powershell,return,Function,Powershell,Return,我试图通过创建一些函数来简化我编写的脚本,但是,我似乎无法让它们按我想要的方式工作 示例函数将接受2个或多个参数,但仅返回1个值。当我这样做时,它会返回每个值,在本例中是传递给函数的所有参数(本例中为2) 我从一些研究中了解到,Powershell返回的值比显式调用的要多,这有点令人困惑,因此我尝试了一些建议,将这些其他值分配给$null,但没有效果 我的函数及其运行结果如下所示: function postReq($path, $payload) { Write-Host $path
$null
,但没有效果
我的函数及其运行结果如下所示:
function postReq($path, $payload) {
Write-Host $path
}
postReq($url, $params)
> [path value (is correct)] [$payload (shouldn't be included here)]
您调用函数的语法在语义上不正确。你写道:
postReq($url, $params)
但这在PowerShell中不是正确的语法。(在语法上有效,但在语义上无效。)在PowerShell中,调用函数时不使用(
和)
,也不使用,
,如下所示:
postReq $url $params
当您使用()
时,您将向函数传递一个参数。解决方案
您并没有按照自己的想法调用函数。调用PowerShell函数时不带括号,参数分隔符为空白,而不是逗号。您的函数调用应该如下所示:
postReq $url $params
使用传统的类似C的语法有什么错?
像上面那样将其称为postReq($url,$params)
会产生两种不希望出现的后果:
),而不是逗号(,
)。但是,逗号在Powershell语法中确实有某种含义——它们表示集合<代码>[1,2,3,4]在功能上与Powershell中的1,2,3,4
相同。在上面的示例中,您正在将两个参数滚动到单个数组参数[$url,$params]
,流写入cmdlet将使用,
作为呈现字符串中的分隔符进行数组联接([DateTime]::Now).ToString()
返回当前本地时间,并对返回的DateTime
对象运行ToString()方法。如果使用如下所示的其中一个重载,则应使用,
分隔每个参数,并且无论是否需要传入参数,都必须指定外圆括号:
OverloadDefinitions
-------------------
string ToString()
string ToString(string format)
string ToString(System.IFormatProvider provider)
string ToString(string format, System.IFormatProvider provider)
string IFormattable.ToString(string format, System.IFormatProvider formatProvider)
string IConvertible.ToString(System.IFormatProvider provider)
如果省略上面空参数重载上的括号,则会得到前面显示重载定义的输出,这与无参数调用函数时的行为不同
这有点奇怪,但我记得在任何编程语言中,函数和方法都是相似的,但不同的,在Powershell中也没有什么不同,只是函数和方法不像在其他语言中那样相似。我发现一个很好的经验法则是:
使用C#语法调用方法,使用shell语法调用函数
绝对是这样。非常感谢。我来自Ruby和Javascript,所以这样做似乎很陌生。谢谢你把它清理干净@我不认为这是重复的。虽然这个问题引出了“如何在Powershell中向函数传递多个参数”的类似答案,但这不是用户所问的问题,事实上,这是Powershell有多少新用户感知函数调用如何工作(特别是因为它是方法调用如何工作的)。@BenderSegreatest,给出了OP接受的答案,这看起来与链接帖子中的混淆完全相同:错误地期望
postReq($url,$params)
传递两个不同的参数,而不是实际传递的参数:一个数组值的参数(其两个元素都以Write Host
打印到控制台,空格分隔)。