最容易的代碼片段來解釋這個問題...比較-對象: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