2012-12-24 199 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