在this question之后,似乎选择对象将其输入设置为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。经过一些调查之后,发现在第一个Select-Object运行之后,$input被设置为$null。例如,在两个Select-Object行之间插入cmdlet会引发错误,指出“尚未为get-member cmdlet指定对象”。
这里发生什么事情?
发布于 2012-03-22 18:58:22
此实例中的$input类型为[System.Management.Automation.Runspaces.PipelineReader`1+GetReadEnumerator>d__0[[System.Object]]]。使用$inputParameters = $input | Select-Object从流水线中读取对象并将其存放起来具有预期的效果:$inputParameters的类型为PSCustomObject,并且可以通过调用Select-Object多次进一步插入。
发布于 2012-03-22 05:23:46
这行得通吗?指定$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
}https://stackoverflow.com/questions/9811026
复制相似问题