最容易的代码片段来解释这个问题...比较-对象:PassThru参数改变输入变量
Clear-Host
$refObj = New-Object System.Object
$refObj | Add-Member -MemberType NoteProperty -Name ObjectMember1 -Value 123
$diffObj = New-Object System.Object
$diffObj | Add-Member -MemberType NoteProperty -Name ObjectMember1 -Value 456
Write-Output 'Before 1st comparison...'
$refObj | Get-Member | ? { $_.MemberType -eq 'NoteProperty' } | Select *
$x = Compare-Object -ReferenceObject $refObj -DifferenceObject $diffObj -IncludeEqual
Write-Output 'After 1st comparison...'
$refObj | Get-Member | ? { $_.MemberType -eq 'NoteProperty' } | Select *
$y = Compare-Object -ReferenceObject $refObj -DifferenceObject $diffObj -PassThru -IncludeEqual
Write-Output 'After 2nd comparison...'
$refObj | Get-Member | ? { $_.MemberType -eq 'NoteProperty' } | Select *
...和结果(似乎是PS版本3和5相同的,没有测试任何其他人)...
我正在努力理解就是为什么-PassThru参数列入正在改变输入变量之一,通过增加一个额外的参数。
除了努力去理解为什么会发生这种情况,我想避免它。是否有一种方法可以在不更改输入变量的情况下为Compare-Object cmdlet指定输出变量?
在此先感谢。
编辑:现在很清楚,这个问题还不够清楚。为了使这个更简单....
$y = Compare-Object -ReferenceObject $refObj -DifferenceObject $diffObj -PassThru -IncludeEqual
上述内容,如何停止添加到$ refObj SideIndicator,并把它添加到$ Y呢?似乎没有比较对象的-OutVariable选项,是否有另一种方法可以做到这一点?
编辑2: 原来存在于比较-对象的-OutVariable选择,但它似乎并没有工作...
Compare-Object -ReferenceObject $refObj -DifferenceObject $diffObj -IncludeEqual -PassThru -OutVariable $objComparisonResults
我希望在$ objComparisonResults数据,但没有数据保存在这个变量中。
谢谢你的回应lit.我认为我没有妥善处理这个问题,因为我的主要问题不是SideIndicator被添加到对象中,而是能够控制它添加到的对象。我将编辑该问题。 – ZenoArrow
使用'-PassThru'时,'SideIndicator'属性被添加到结果中的每个对象。原始的ReferenceObject和DifferenceObject保持不变。如果对象在DifferenceObject中是新的,则它将在带有SideIndicator的结果中。 – lit