2017-03-20 14 views
0

私が試しているコードスニペットは、潜在的な問題は、関数の外で宣言されている配列はtestobjarray()関数で使用できません。それは、testobjarray()ファンクションでカウントをゼロとして表示しますが、addobjects()では、オブジェクトを配列に追加してオブジェクトの内容を表示することができます。関数はグローバル変数を埋め込みません

$Global:objectorray = @() 

function addobjects() { 
    $object = New-Object PSObject 
    $object | Add-Member -MemberType NoteProperty -Name "Name" -Value "Pradeep RN" 
    $object | Add-Member -MemberType NoteProperty -Name "Age" -Value 24 
    $object | Add-Member -MemberType NoteProperty -Name "Profession" -Value "Software Engineer" 
    $objectorray += $object 
    Write-Host "in addobjects function" $objectorray 
} 

function testobjarray() { 
    Write-Host "in the another function" $objectorray.Count 
} 

addobjects 
testobjarray 
+1

これを理解するために必要なすべての情報は、['Get-Help about_Scopes'](https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell)にあります。コア/約/ about_scopes)。 –

+1

関数内のグローバル変数を変更することは、トラブルシューティングを複雑にするため、適切ではありません。関数がオブジェクトを返すようにして、呼び出し元スコープで追加操作を実行する方がよいでしょう。 –

答えて

0

あなたのaddobjects()機能

変更でグローバル配列に値を代入されていません。

$objectorray+=$object 

へ:

$global:objectorray+=$object 

そして、あなたの中にも同じ変更testobjarray()機能:

Write-Host "in the another function" $global:objectorray.Count 
1

必要がない場合は、グローバルを使用しないでください。この場合、あなたはそうする必要はありません。 $objectorrayのスコープを変更して、スクリプトスコープ内にあるようにします。次に、関数の戻り値を使用して$objectorrayを設定します。私は、この例を動作させるために必要なものを少し変更したことに注意してください。あなたが見ていると、PowerShellでのスコープを理解する必要があるコメントで述べたように

$objectorray = @() 

function addobjects() { 
    $object = New-Object PSObject 
    $object | Add-Member -MemberType NoteProperty -Name "Name" -Value "Pradeep RN" 
    $object | Add-Member -MemberType NoteProperty -Name "Age" -Value 24 
    $object | Add-Member -MemberType NoteProperty -Name "Profession" -Value "Software Engineer" 
    $object 
    Write-Host "in addobjects function" $object 
} 

function testobjarray() { 
    Write-Host "in the another function" $objectorray.Count 
} 

$objectorray += addobjects 
testobjarray 

。これの参照はabout_scopesです。 gvee's answerはグローバルスコープを適切に使用する方法を示しています。あなたの問題は、PowerShellが異なるスコープで同じ名前の変数を許可するために発生しました。

$objectorray.Countは、親スコープにアクセスできるため、機能testobjarray内で機能します。

関連する問題