2015-02-05 23 views
5

Hızlı Sorukarşılaştırmak-nesne sol veya sağ tarafı sadece

bunu yapmak için daha iyi (yani daha verimli/daha özlü) bir yolu var mı?

compare-object $a $b | ?{$_.SideIndicator -eq '<='} 

Detay

Compare-Object sizin olsun hangi sonuçları değiştirmeye izin verecek paramenters -excludeDifferent ve -includeEqual verir.

  • kullanarak hem bir iç sadece -includeEqual kullanılarak
  • size tam dış verir katılmak verir katılmak sadece -excludeDifferent anlamsızdır kullanarak
  • ; varsayılan olarak eşit öğeler hariç tutulduğundan, şimdi her şeyi hariç tutar.

-includeLeft, -excludeLeft veya benzeri için seçenek yoktur.

Halen sağ tarafın boş olduğu sol dış birleştirme yapmak (yani, fark nesnesinde bulunmayan başvuru nesnesindeki öğeler) Yukarıdaki koda göre sonuçları manuel olarak filtrelemem gerekiyor.

Bir şey özledim mi/daha iyi bir yolu var mı?

http://ss64.com/ps/compare-object.html

+0

Ekleyen özellik isteği: https://connect.microsoft.com/PowerShell/feedbackdetail/view/1116603/feature-suggestion-compare-object-new -parameters-referenceonly-differenceonly – JohnLBevan

cevap

2

o cmdlet'i için böyle bir seçenek ancak sonuç filtrelemek için onu kullanıyoruz sonra (örneğin profilinizde) bir filtre oluşturarak olabilir, vardır:

filter leftside{ 
param(
     [Parameter(Position=0, Mandatory=$true,ValueFromPipeline = $true)] 
     [ValidateNotNullOrEmpty()] 
     [PSCustomObject] 
     $obj 
    ) 

    $obj|?{$_.sideindicator -eq '<='} 

} 
gibi şey

kullanım

compare-object $a $b | leftside 
+0

Henüz bu filtreden bahsetmedim! – JohnLBevan

+1

filtresi, PS'de daha önce kullanıma sunuldu, ancak bunun bir "işlev" ile tamamen değiştirilebileceğini düşünüyorum –

İlgili konular