2012-12-24 161 views
0

我有一个PSObject的集合,我想在其中迭代设置成员的属性。我建立了一个for循环,并通过引用一个函数来传递当前对象,但不知道如何访问对象属性。例如:通过引用设置对象属性

function create-object { 
    $foo = new-object -TypeName PSObject -Prop ` 
     @{ 
      "p1" = $null 
      "p2" = $null 
     } 
    $foo 
} 

$objCol = @() 

foreach ($k in (1 .. 3)){$objCol += create-object} 

for ($i=0;$i -le $objCol.Length;$i++) { 
    Write-Host "hi" 
    reftest ([ref]$objCol[$i]) 
} 

function reftest([ref]$input) 
{ 
    $input.p1.value="property1" 
} 
$objCol 

...返回Property 'p1' cannot be found on this object - 我如何通过引用设置$ object.p1函数?

+1

'$ input'是一个保留名称,您需要用其他名称进行更改。 –

回答

2

正如Christian所指出的那样,我已将格式化为您的示例,并将$input的更改合并到其他名称$arg中。以下作品:

function create-object { 
    $foo = new-object PSObject -Property @{ 
     "p1" = $null 
     "p2" = $null 
    } 
    $foo 
} 

function reftest($arg) 
{ 
    $arg.p1="property1" 
} 

$objCol = @() 

(1..3) | % {$objCol += create-object} 

for ($i=0;$i -lt $objCol.Length;$i++) { 
    reftest $objCol[$i] 
} 

$objCol