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$null在第一次Select-Object运行之后设置的。例如,$input | Get-Member在两Select-Object行之间插入会引发错误,指出“没有为 get-member cmdlet 指定对象”。

这里发生了什么?

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 回答