2013-10-02 3 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

Смежные вопросы