2017-07-18 8 views
0

objetが関数に渡されたとき、そのオブジェクトに属している型NotePropertyのプロパティが失われているようです。オブジェクトが関数に渡されたときにオブジェクトのプロパティが失われる

関数の外にチェック - -

簡単なテストは、以下の出力をもたらす(以下のコード)が、この現象を再現することができ
プロパティが存在します。
機能のチェック -
プロパティが存在しません。

PowerShellがこのマナーで動作する理由を説明できる人は誰でも、私が追加したメンバーが期待どおり機能に渡されていることを保証するためにどうすれば対処できますか?


アンスガーは、あなたのアウトオブジェクト関数の配列のようにそれを処理している、述べたようにbehavour

function Out-Object 
{ 
    param(
     [parameter(Mandatory=$true)] 
     [object[]]$Object 
    ) 

    Write-Output "Checking inside of function -" 
    if (Get-Member -InputObject $Object -Name "PropertyOne" -MemberType "NoteProperty") { 
     Write-Output " Property exists." 
    } else { 
     Write-Output " Property does not exist." 
    } 
} 

$newObject = New-Object -TypeName PSCustomObject 
$newObject | Add-Member -NotePropertyName "PropertyOne" -NotePropertyValue "ValueOne" 

Write-Output "Checking outside of function -" 
if (Get-Member -InputObject $newObject -Name "PropertyOne" -MemberType "NoteProperty") { 
    Write-Output " Property exists." 
} else { 
    Write-Output " Property does not exist." 
} 

Out-Object $newObject 
+2

'[オブジェクト[]] $ Object'あなたの関数内のインデックスに$オブジェクトが必要になります。 - >' [オブジェクト] $オブジェクト '。プロパティは失われませんが、配列にオブジェクトをラップして、その配列に入れ子になったオブジェクトのプロパティがあるかどうかを確認します(存在しない場合)。 –

+1

また、関数のbegin-process-end構造体を使用して、 '$ object'の各オブジェクトのプロセスコードを別々に実行し、余分な手間をかけずにすべてのプロパティにアクセスすることができます。 – Vesper

答えて

1

上に再現するコード。あなたは

[object]$Object 

[object[]]$Object 

を変更するか、またはあなたが

if (Get-Member -InputObject $Object[0] -Name "PropertyOne" -MemberType "NoteProperty") { 
+0

ああ、もちろん。見てみると頭が上がってくれてありがとう。 –

関連する問題