我有一些类似于下面的伪代码
$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中的范围界定方式非常不熟悉。
答案 0 :(得分:1)
你的猜测是正确的。尝试:
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;}
关于代码的最后一条评论 - 在数组上使用+ =并不是很快。数组无法调整大小,因此+ =将创建一个新数组,从原始数组复制元素并在末尾添加元素。如果数组很小,那么语法清晰方便,但如果数组变大且性能很重要,您可以考虑使用不同的数据结构,如ArrayList。