1

この質問に続いて、Select-Objectは処理の一部として入力をnullに設定しているようです。これは私には間違っているようです。これが私がやろうとしていることです:

$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です。少し調べてみると、最初の実行後に$input設定されていることがわかりました。例として、2行の間に挿入すると、「get-memberコマンドレットにオブジェクトが指定されていません」というエラーがスローされます。$nullSelect-Object$input | Get-MemberSelect-Object

ここで何が起こっているのですか?

4

2 に答える 2

2

この場合の$inputのタイプはです[System.Management.Automation.Runspaces.PipelineReader`1+GetReadEnumerator>d__0[[System.Object]]]。パイプ$inputParameters = $input | Select-Objectラインからオブジェクトを読み取り、それを隠しておくと、望ましい効果があります。$inputParametersタイプPSCustomObjectがあり、を呼び出すことでさらに複数回突くことができますSelect-Object

于 2012-03-22T10:58:22.247 に答える
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
}
于 2012-03-21T21:23:46.317 に答える