Powershell 选择对象是否修改输入?

Powershell 选择对象是否修改输入?,powershell,powershell-2.0,powershell-remoting,Powershell,Powershell 2.0,Powershell Remoting,接下来,作为处理的一部分,Select对象似乎将其输入设置为null。我觉得这是不对的。以下是我想做的: $sessionInput = new-object -TypeName System.Object $sessionInput | Add-Member -MemberType NoteProperty -Name Foo -Value $foo $sessionInput | Add-Member -MemberType NoteProperty -Name Bar -Value $ba

接下来,作为处理的一部分,Select对象似乎将其输入设置为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
。例如,在两行
选择对象
之间插入
$input | Get Member
,会抛出一个错误,指出“没有为Get Member cmdlet指定对象。”


这是怎么回事?

这行吗?指定$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
}

此实例中$input的类型为
[System.Management.Automation.Runspaces.PipelineReader`1+GetReadEnumerator>d_u0[[System.Object]]]
。执行
$inputParameters=$input | Select Object
从管道中读取对象并将其隐藏起来具有所需的效果:
$inputParameters
具有type
PSCustomObject
,可以通过调用
选择对象

进一步戳多次。此外,Select Object创建新对象,并复制您要求的属性值。