2015-02-05 8 views
5

Schnell Fragevergleichen-Objekt nach links oder rechts auf dieser Seite nur

Gibt es einen besseren (das heißt effizienter/prägnanter) Weg, dies zu tun?

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

Details

Compare-Object gibt paramenters -excludeDifferent und -includeEqual, damit Sie ändern, welche Ergebnisse Sie bekommen.

  • mit beiden gibt Ihnen eine innere Verknüpfung
  • mit nur -includeEqual gibt Ihnen eine vollständige äußere Verknüpfung
  • mit nur -excludeDifferent sinnlos ist; Standardmäßig werden gleiche Elemente ausgeschlossen, sodass jetzt alles ausgeschlossen wird.

Es gibt keine Optionen für -includeLeft, -excludeLeft oder ähnlich.

Um einen linken äußeren Join auszuführen, bei dem die rechte Seite Null ist (d. H. Elemente im Referenzobjekt, die nicht im Differenzobjekt enthalten sind), muss ich die Ergebnisse wie im obigen Code manuell filtern.

Habe ich etwas verpasst/gibt es einen besseren Weg?

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

+0

Übermittelt Feature Anfrage: https://connect.microsoft.com/PowerShell/feedbackdetail/view/1116603/feature-suggestion-compare-object-new -parameters-referenceonly-differenceonly – JohnLBevan

Antwort

2

so da keine Option für die Cmdlets ist, kann jedoch einen Filter (in Ihrem Profil zum Beispiel) erstellen und dann verwenden, um das Ergebnis zu filtern: etwas wie

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

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

} 

Nutzung

compare-object $a $b | leftside 
+0

Ich habe noch keine Filter gefunden, also vielen Dank für diesen Pro-Tipp! – JohnLBevan

+1

Filter wurde früh in PS eingeführt, aber ich denke, es könnte vollständig durch eine "Funktion" ersetzt werden –

Verwandte Themen