Arrays 从一个函数返回嵌套数组,作为参数传递给另一个函数

Arrays 从一个函数返回嵌套数组,作为参数传递给另一个函数,arrays,function,powershell,return,arguments,Arrays,Function,Powershell,Return,Arguments,我很恼火,试图不使用$Global变量来传递变量,我在这个论坛上看到了其他看似相同的“主题”,但在细节上我迷路了,或者看起来他们在做一些不同的事情——或者我不理解这个问题或解决方案 我从func1中的Get WinEvent获取事件对象数组。我想返回该数组并将其用作另一个func2的参数。 案例1 $evtArray=Get WinEvt-FilterHashtable@{LogName=Application}#为简洁起见进行了简化 返回$evtArray#不确定是否工作 返回$evtArra

我很恼火,试图不使用$Global变量来传递变量,我在这个论坛上看到了其他看似相同的“主题”,但在细节上我迷路了,或者看起来他们在做一些不同的事情——或者我不理解这个问题或解决方案

我从func1中的
Get WinEvent
获取事件对象数组。我想返回该数组并将其用作另一个func2的参数。 案例1

$evtArray=Get WinEvt-FilterHashtable@{LogName=Application}#为简洁起见进行了简化
返回$evtArray#不确定是否工作
返回$evtArray#不确定是否工作
return@$evtArray#不确定是否工作
}**```
```**函数func2($evtArray){#不起作用
函数func2(,$evtArray)#语法错误
函数func2(,($evtArray))#语法错误
……对$evtArray进行进一步处理**```
案例2(可能与案例1相同-不确定)
```**$array+=,(,[int],“字符串”)
$array+=,(,[int],“字符串”)**
....
然后将$array作为参数传递给函数
**func2($array)**

我花了几个小时研究这个问题,看到了十几个看起来很有前途的主题……

我建议您不要使用return。它结束了当前函数,通常是不必要的。要将参数传递给函数,请不要用括号括起来。参数应该用空格分隔,最好是您命名参数,尽管这是不必要的不需要

$evtArray = Get-WinEvent -FilterHashtable @{ LogName='Application'; ID = 0}

Function func2($Array){
    $array.gettype()
}

func2 $evtArray
正如我之前所说的,您不必命名参数,而是使用位置参数,但是脚本/模块的最佳实践是使用全名

func2 -Array $evtArray
无论以哪种方式调用,输出都是

IsPublic IsSerial Name                                     BaseType                                                                                                                           
-------- -------- ----                                     --------                                                                                                                           
True     True     Object[]                                 System.Array

您不能使用括号调用函数。请像
Get Something-SomeParameter$evtarray
那样调用它。好吧,老习惯,我的代码func2$array或func2$array或func2,$array或func2,(array)…这对很多人来说似乎是个问题,我看到很多人都有相同的问题,但没有明确的答案…你的代码很难理解。func1在哪里?Doug,非常感谢你的见解。我是powershell的n00bie,但在你的示例中,$evtArray是全局范围变量,我真的试图避免这样做….函数func1{$evtArray=Get WinEvent-FilterHashtable@{LogName='Application';ID=0}返回,evt$array''函数func2($tmparray){……}''func2=func1'好的,这是我的工作……我见过一些将数组作为参数传递的方法,但它们很复杂,解决方案似乎假设读者对powershell的了解比我多得多``function firstFunction{$array=1,2,3 return,$array}function secondFunction{$tmpArray=firstFunction Write Host$tmpArray}`News flash!我成功了!func2@(func1)
IsPublic IsSerial Name                                     BaseType                                                                                                                           
-------- -------- ----                                     --------                                                                                                                           
True     True     Object[]                                 System.Array