如何在Powershell中使用带有数组的参数调用函数?

马克·艾里森

在一个名为的文件中考虑此脚本 arrays.ps1

Function CallMe
{
    param($arg1, $arg2)
    Write-Host "`$arg1 is $arg1"
    Write-Host "`$arg2 is $arg2"    
}

$args = "a","b"
CallMe $args

输出:

PS C:\Users\Moomin\Documents> .\arrays.ps1
$arg1 is a b
$arg2 is

如果我修改它,那么最后一行是

CallMe $args.Split(" ")

我得到相同的输出。如何将数组传递给函数并将数组元素拆分为参数?

更新

这更接近我在做什么:

Function CallMe
{
    param($y, $z)
    Write-Host "`$y is $y"
    Write-Host "`$z is $z"

}

Function DoSomething
{
    param($x)
    Write-Host "This function only uses one arg: $x"
}

Function DoSomethingElse
{
    Write-Host "This function does not take any arguments"   
}


$funcCalls = (
    ("DoSomething", "c"),
    ("CallMe", ("a","b")),
    ("DoSomethingElse", '')
    )


foreach ($func in $funcCalls) {
    Write-Host "Executing function $($func[0]) with arguments `"$($func[1])`""
    & $func[0] $func[1]
}

如果我运行它,这是输出:

PS C:\Users\Moomin\Documents> .\arrays.ps1
Executing function DoSomething with arguments "c"
This function only uses one arg:
Executing function CallMe with arguments "a b"
$y is a b
$z is
Executing function DoSomethingElse with arguments ""
This function does not take any arguments
雷纳特

您可以使用'splat'数组@将每个元素作为参数传递给函数。

$array = @('a', 'b')
CallMe @array

从更新的示例中,最好将函数存储为ScriptBlocks而不是字符串并用于.Invoke()执行。

$funcCalls = (
    ({DoSomething @args}, "c"),
    ({CallMe @args}, ("a","b")),
    ({DoSomethingElse @args}, '')
    )

foreach ($func in $funcCalls) {
    Write-Host "Executing function {$($func[0])} with arguments `"$($func[1])`""
    $func[0].Invoke($func[1])
}

请注意,参数数组将传递到自动变量$args该变量被标记为@args

编辑:

如果要从无法将其存储为ScriptBlocks的源中读取函数,则可以使用将字符串转换为ScriptBlocks [scriptblock]::Create()

$funcCalls = (
    ('DoSomething @args', "c"),
    ('CallMe @args', ("a","b")),
    ('DoSomethingElse @args', '')
    )

foreach ($func in $funcCalls) {
    Write-Host "Executing function {$($func[0])} with arguments `"$($func[1])`""
    $script = [scriptblock]::Create($func[0])
    $script.Invoke($func[1])
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

调用带有数组参数的函数

如何在Powershell中使用Get-ChildItem排除带有数组的项目列表?

如何在 Java 中使用带有数组的方法?

如何在 Sequelize 中使用带有函数调用的事务

如何在带有分页CodeIgniter的函数中使用参数?

如何在c中使用带有参数的函数指针?

在 C 中使用带有数组的函数作为输入

如何在 F# 中使用带有两个参数的函数,这些参数是整数的二维数组

列表对象不可调用,调用其参数也是带有数组的函数的函数

如何在使用带有数组参数的调用时将功能文件的执行限制为一次(执行__loop 0)

如何在带有参数的函数中调用变量函数?

如何在PowerShell脚本中使用带有未命名参数的命名参数?

在Python中使用字典调用带有参数的函数

在Django中使用HTML调用带有参数的Python函数

多次调用带有数组参数的set-returning函数

Java / C ++ SWIG-带有数组参数的调用函数

带有数据数组的函数调用上的模板参数包扩展

如何在带有SWIG绑定的Lua中使用函数指针调用函数?

如何在r中使用带有多个参数的函数列表的应用函数?

如何在python的groupby函数中使用带有两个参数的用户定义函数

如何在带有附加参数的其他函数中调用带有参数的函数?

如何在嵌套函数中使用参数调用函数?

如何在Django模板中调用带有参数的函数?

如何在Blazor中调用带有参数的函数?

如何在 C# 中使用反射调用带有 Action<T> 参数的泛型方法

如何在 kotlin 中使用 :: 调用带有参数的静态方法

如何在C ++中使用构造函数(只是构造函数)在类中初始化大型私有数组?

Java调用带有数组参数的方法

如何在每个函数调用中使用带有Flask-RESTPlus的装饰器?