2012-03-21 5 views
1

this questionに続いて、Select-Objectは処理の一部として入力をnullに設定するようです。これは私にとっては間違っているようです。ここで私は何をしようとしているのです:Select-Objectは入力を変更しますか?

$sessionInput = new-object -TypeName System.Object 
$sessionInput | Add-Member -MemberType NoteProperty -Name Foo -Value $foo 
$sessionInput | Add-Member -MemberType NoteProperty -Name Bar -Value $bar 
Invoke-Command -Session $session -InputObject $sessionInput { 
    $foo = $input | Select-Object -ExpandProperty Foo 
    $bar = $input | Select-Object -ExpandProperty Bar 

    # Expected: $foo, $bar inside the session = $foo, $bar outside the session 
} 

実際に何が起こるのみ$fooはその期待値を持ち、かつ$barは常に$nullであるということです。少し調べた後、最初にSelect-Objectが実行された後に$input$nullに設定されていることがわかります。たとえば、2つのSelect-Object行の間に$input | Get-Memberを挿入すると、「get-memberコマンドレットにオブジェクトが指定されていません」というエラーがスローされます。

ここでは何が起こっていますか?

答えて

2

この場合、$ inputのタイプは[System.Management.Automation.Runspaces.PipelineReader`1+GetReadEnumerator>d__0[[System.Object]]]です。オブジェクトをパイプラインから読み取って、それを隠すために$inputParameters = $input | Select-Objectを実行すると、$inputParametersの型がPSCustomObjectになり、Select-Objectを呼び出してさらに複数回ポーチすることができます。

+0

また、Select-Objectは新しいオブジェクトを作成し、求めたプロパティの値をコピーします。 – JasonMArcher

0

これは機能しますか? $ SomeVar = $ Inputを指定し、それを代わりに呼び出すのですか?

$sessionInput = new-object -TypeName System.Object 
$sessionInput | Add-Member -MemberType NoteProperty -Name Foo -Value $foo 
$sessionInput | Add-Member -MemberType NoteProperty -Name Bar -Value $bar 
Invoke-Command -Session $session -InputObject $sessionInput { 
    $TempInput = $input 
    $foo = $TempInput | Select-Object -ExpandProperty Foo 
    $bar = $TempInput | Select-Object -ExpandProperty Bar 

    # Expected: $foo, $bar inside the session = $foo, $bar outside the session 
} 
+0

いいえ、同じ問題です。 – alastairs

関連する問題