2013-10-02 43 views
0

我有以下有很多的功能添加到同一个数组变量

$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中工作。

回答

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。

+0

我不确定创建一个数组的数组是我想要做的。我可以说在变量完美工作之前添加'$ script:'!谢谢一堆。我会研究如何增加未来的价值 – mhopkins321