2015-02-05 8 views
5

domanda veloceconfronto-oggetto a sinistra oa destra solo

Esiste un migliore (/ più conciso cioè più efficiente) modo per fare questo?

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

Particolare

Compare-Object dà paramenters -excludeDifferent e -includeEqual per consentire di emendare cui risultati si ottiene.

  • utilizzando sia ti dà un inner join
  • utilizzando solo -includeEqual ti dà un full outer join
  • utilizzando solo -excludeDifferent è inutile; come per default sono esclusi gli oggetti uguali, quindi ora escluderà tutto.

Non ci sono opzioni per -includeLeft, -excludeLeft o simili.

Attualmente per eseguire un join esterno sinistro in cui il lato destro è nullo (ovvero elementi nell'oggetto di riferimento che non si trovano nell'oggetto differenza), è necessario filtrare i risultati manualmente, come indicato nel codice precedente.

Ho perso qualcosa/c'è un modo migliore?

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

+0

richiesta di funzionalità Inserito: https://connect.microsoft.com/PowerShell/feedbackdetail/view/1116603/feature-suggestion-compare-object-new -parametri-referenceonly-differenceonly – JohnLBevan

risposta

2

non esiste alcuna opzione così per quel cmdlet, tuttavia è possibile creare un filtro (nel proprio profilo, per esempio) e poi usarlo per filtrare il risultato: qualcosa di simile

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

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

} 

utilizzo

compare-object $a $b | leftside 
+0

Non ho ancora scoperto 'filter's, quindi grazie extra per quel suggerimento pro! Il filtro – JohnLBevan

+1

è stato introdotto in precedenza in PS, ma penso che potrebbe essere completamente sostituito con una 'funzione' –