2015-02-05 41 views
5

Câu hỏi nhanhso sánh đối tượng sang trái hoặc bên phải chỉ

Có (ví dụ: hiệu quả hơn/ngắn gọn hơn) cách tốt hơn để làm điều này?

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

chi tiết

Compare-Object cho paramenters -excludeDifferent-includeEqual để cho phép bạn sửa đổi mà kết quả bạn nhận được.

  • sử dụng cả hai mang đến cho bạn một bên tham gia
  • chỉ sử dụng -includeEqual mang đến cho bạn một bên ngoài đầy đủ tham gia
  • chỉ sử dụng -excludeDifferent là vô nghĩa; như các mục bằng nhau mặc định được loại trừ, do đó, nó sẽ loại trừ mọi thứ.

Không có tùy chọn nào cho -includeLeft, -excludeLeft hoặc tương tự.

Hiện tại để thực hiện một phép nối ngoài bên trái, trong đó bên phải là rỗng (tức là các mục trong đối tượng tham chiếu không nằm trong đối tượng khác biệt), tôi cần lọc kết quả theo cách thủ công, theo mã bên trên.

Tôi đã bỏ lỡ điều gì đó/có cách nào tốt hơn không?

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

+0

Đăng yêu cầu tính năng: https://connect.microsoft.com/PowerShell/feedbackdetail/view/1116603/feature-suggestion-compare-object-new -parameters-referenceonly-differenceonly – JohnLBevan

Trả lời

2

không có tùy chọn như vậy cho một cmdlet đó, tuy nhiên bạn có thể tạo ra một bộ lọc (trong hồ sơ của bạn chẳng hạn) và sau đó sử dụng nó để lọc kết quả: cái gì đó như

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

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

} 

sử dụng

compare-object $a $b | leftside 
+0

Tôi chưa phát hiện ra 'bộ lọc', vì vậy hãy cảm ơn thêm về mẹo chuyên nghiệp đó! Bộ lọc – JohnLBevan

+1

được giới thiệu lần đầu trong PS nhưng tôi nghĩ rằng nó có thể thay thế hoàn toàn bằng 'hàm' –

Các vấn đề liên quan