问题
Quick Question
Is there a better (i.e. more efficient / more concise) way to do this?
compare-object $a $b | ?{$_.SideIndicator -eq '<='}
Detail
Compare-Object
gives paramenters -excludeDifferent
and -includeEqual
to allow you to amend which results you get.
- using both gives you an inner join
- using just
-includeEqual
gives you a full outer join - using just
-excludeDifferent
is pointless; as by default equal items are excluded, so it will now exclude everything.
There are no options for -includeLeft
, -excludeLeft
or similar.
Currently to do a left outer join where the right side is null (i.e. items in the reference object which are not in the difference object) I need to filter the results manually, as per the code above.
Have I missed something / is there a better way?
http://ss64.com/ps/compare-object.html
回答1:
there is no option like that for that cmdlet, however you could create a filter (in your profile for example) and then use it to filter the result : something like
filter leftside{
param(
[Parameter(Position=0, Mandatory=$true,ValueFromPipeline = $true)]
[ValidateNotNullOrEmpty()]
[PSCustomObject]
$obj
)
$obj|?{$_.sideindicator -eq '<='}
}
usage
compare-object $a $b | leftside
回答2:
You can also add -property SideIndicator and use an if statement for it.
$Missing = compare-object $Old $new -Property Name,SideIndicator
ForEach($Grp in $Missing) {
if($grp.sideindicator -eq "<=") {
# Do Something here
}
}
来源:https://stackoverflow.com/questions/28342081/compare-object-left-or-right-side-only