跟在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
。例如,在两个Select-Object
行之间插入$input | Get-Member
会引发一个错误,指出“没有对象已被指定给get-member cmdlet”。
这是怎么回事?
另外,Select-Object会创建新的对象,并复制您请求的属性的值。 – JasonMArcher 2012-05-03 19:22:54