Variables 将多个函数添加到同一数组变量

Variables 将多个函数添加到同一数组变量,variables,powershell,scoping,Variables,Powershell,Scoping,我有一些类似于下面的伪代码 $funcValues = @(New-Object -TypeName psobject -Property @{'Function' = ''; 'Value' = '';}) function func1(){ while($i -lt 5){ $funcValues += @(New-Object -TypeName psobject -Property @{'Function' = 'func1'; 'Value' = $i;})

我有一些类似于下面的伪代码

$funcValues = @(New-Object -TypeName psobject -Property @{'Function' = ''; 'Value' = '';}) 

function func1(){
    while($i -lt 5){
        $funcValues += @(New-Object -TypeName psobject -Property @{'Function' = 'func1'; 'Value' = $i;}) 
        $i++
    }
}

function func2(){
    while($i -lt 3){
        $funcValues += @(New-Object -TypeName psobject -Property @{'Function' = 'func2'; 'Value' = $i;}) 
        $i++
    }
}

func1
func2

$funcValues | Export-CSV C:\path\results.csv -noType
目标是将这两个函数都添加到数组中,并在调用函数后将数组导出到csv。但是,当该代码位于函数内部时,它不会向数组写入任何内容,但如果该代码位于函数外部,它就会工作


我猜这与变量作用域有关,但我对powershell中的作用域工作方式非常陌生。

您的猜测是正确的。尝试:

function func1(){
    while($i -lt 5){
        $script:funcValues += @(New-Object -TypeName psobject -Property @{'Function' = 'func1'; 'Value' = $i;}) 
        $i++
    }
}
请注意,您正在创建一个数组数组。如果这不是您想要的,请使用:

$script:funcValues += New-Object -TypeName psobject -Property @{'Function' = 'func1'; 'Value' = $i;}
如果您使用的是V3,则可以进一步简化:

$script:funcValues += [pscustomobject]@{'Function' = 'func1'; 'Value' = $i;}

最后一条关于代码的注释是:在数组中使用+=不是很快。数组无法调整大小,因此+=将创建一个新数组,从原始数组复制元素并在末尾添加元素。如果数组是小的,那么语法是清晰和方便的,但是如果数组变得大并且性能很重要,你可能会考虑使用不同的数据结构,比如ARAYLIST。< /P>我不确定是否创建数组数组也是我想要做的。我可以说在变量运行之前添加
$script:
!非常感谢。我将研究如何在未来增加价值