다음을 통해 공유


Compare-Object

두 개체 집합을 비교합니다.

구문

Compare-Object
       [-ReferenceObject] <PSObject[]>
       [-DifferenceObject] <PSObject[]>
       [-SyncWindow <Int32>]
       [-Property <Object[]>]
       [-ExcludeDifferent]
       [-IncludeEqual]
       [-PassThru]
       [-Culture <String>]
       [-CaseSensitive]
       [<CommonParameters>]

Description

cmdlet은 Compare-Object 두 개체 집합을 비교합니다. 한 개체 집합은 참조이고 다른 개체 집합은 차이입니다.

Compare-Object 는 전체 개체를 비교하는 사용 가능한 메서드를 확인합니다. 적절한 메서드를 찾을 수 없는 경우 입력 개체의 ToString() 메서드를 호출하고 문자열 결과를 비교합니다. 비교에 사용할 하나 이상의 속성을 제공할 수 있습니다. 속성이 제공되면 cmdlet은 해당 속성의 값만 비교합니다.

비교 결과는 속성 값이 참조 개체() 또는 차이=> 개체(<=)에나타나는지 여부를 나타냅니다. IncludeEqual 매개 변수를 사용하는 경우 (==)는 값이 두 개체 모두에 있음을 나타냅니다.

참조 또는 차이점 개체가 null($null) Compare-Object 이면 종료 오류가 생성됩니다.

일부 예제에서는 스플래팅을 사용하여 코드 샘플의 줄 길이를 줄입니다. 자세한 내용은 about_Splatting 참조하세요.

예제

예제 1 - 두 텍스트 파일의 내용 비교

이 예제에서는 두 텍스트 파일의 내용을 비교합니다. 이 예제에서는 각 값이 별도의 줄에 있는 다음 두 텍스트 파일을 사용합니다.

  • Testfile1.txt 에는 개, 다람쥐 및 새 값이 포함됩니다.
  • Testfile2.txt 에는 cat, bird 및 racoon 값이 포함됩니다.

출력은 파일 간에 다른 줄만 표시합니다. Testfile1.txt참조 개체(<=)이며 Testfile2.txt차이 개체(=>)입니다. 두 파일에 모두 표시되는 콘텐츠가 있는 줄은 표시되지 않습니다.

Compare-Object -ReferenceObject (Get-Content -Path C:\Test\Testfile1.txt) -DifferenceObject (Get-Content -Path C:\Test\Testfile2.txt)

InputObject SideIndicator
----------- -------------
cat         =>
racoon      =>
dog         <=
squirrel    <=

예제 2 - 각 콘텐츠 줄 비교 및 차이점 제외

이 예제에서는 ExcludeDifferent 매개 변수를 사용하여 두 텍스트 파일의 각 콘텐츠 줄을 비교합니다.

PowerShell 7.1을 기준으로 ExcludeDifferent 매개 변수를 사용하는 경우 IncludeEqual은 유추되고 출력에는 SideIndicator(==)에 표시된 대로 두 파일에 포함된 줄만 포함됩니다.

$objects = @{
  ReferenceObject = (Get-Content -Path C:\Test\Testfile1.txt)
  DifferenceObject = (Get-Content -Path C:\Test\Testfile2.txt)
}
Compare-Object @objects -ExcludeDifferent

InputObject SideIndicator
----------- -------------
bird        ==

예제 3 - PassThru 매개 변수를 사용할 때의 차이점 표시

일반적으로 Compare-Object 다음 속성을 사용하여 PSCustomObject 형식을 반환합니다.

  • 비교할 InputObject
  • 출력이 속한 입력 개체를 보여 주는 SideIndicator 속성

PassThru 매개 변수사용하는 경우 개체의 형식은 변경되지 않지만 반환된 개체의 인스턴스에는 SideIndicator라는 추가 NoteProperty가 있습니다. SideIndicator 는 출력이 속한 입력 개체를 보여 줍니다.

다음 예제에서는 다양한 출력 형식을 보여 줍니다.

$a = $True
Compare-Object -IncludeEqual $a $a
(Compare-Object -IncludeEqual $a $a) | Get-Member

InputObject SideIndicator
----------- -------------
       True ==

   TypeName: System.Management.Automation.PSCustomObject
Name          MemberType   Definition
----          ----------   ----------
Equals        Method       bool Equals(System.Object obj)
GetHashCode   Method       int GetHashCode()
GetType       Method       type GetType()
ToString      Method       string ToString()
InputObject   NoteProperty System.Boolean InputObject=True
SideIndicator NoteProperty string SideIndicator===

Compare-Object -IncludeEqual $a $a -PassThru
(Compare-Object -IncludeEqual $a $a -PassThru) | Get-Member

True

   TypeName: System.Boolean
Name          MemberType   Definition
----          ----------   ----------
CompareTo     Method       int CompareTo(System.Object obj), int CompareTo(bool value), int IComparable.CompareTo(Syst
Equals        Method       bool Equals(System.Object obj), bool Equals(bool obj), bool IEquatable[bool].Equals(bool ot
GetHashCode   Method       int GetHashCode()
GetType       Method       type GetType()
GetTypeCode   Method       System.TypeCode GetTypeCode(), System.TypeCode IConvertible.GetTypeCode()
ToBoolean     Method       bool IConvertible.ToBoolean(System.IFormatProvider provider)
ToByte        Method       byte IConvertible.ToByte(System.IFormatProvider provider)
ToChar        Method       char IConvertible.ToChar(System.IFormatProvider provider)
ToDateTime    Method       datetime IConvertible.ToDateTime(System.IFormatProvider provider)
ToDecimal     Method       decimal IConvertible.ToDecimal(System.IFormatProvider provider)
ToDouble      Method       double IConvertible.ToDouble(System.IFormatProvider provider)
ToInt16       Method       short IConvertible.ToInt16(System.IFormatProvider provider)
ToInt32       Method       int IConvertible.ToInt32(System.IFormatProvider provider)
ToInt64       Method       long IConvertible.ToInt64(System.IFormatProvider provider)
ToSByte       Method       sbyte IConvertible.ToSByte(System.IFormatProvider provider)
ToSingle      Method       float IConvertible.ToSingle(System.IFormatProvider provider)
ToString      Method       string ToString(), string ToString(System.IFormatProvider provider), string IConvertible.To
ToType        Method       System.Object IConvertible.ToType(type conversionType, System.IFormatProvider provider)
ToUInt16      Method       ushort IConvertible.ToUInt16(System.IFormatProvider provider)
ToUInt32      Method       uint IConvertible.ToUInt32(System.IFormatProvider provider)
ToUInt64      Method       ulong IConvertible.ToUInt64(System.IFormatProvider provider)
TryFormat     Method       bool TryFormat(System.Span[char] destination, [ref] int charsWritten)
SideIndicator NoteProperty string SideIndicator===

PassThru를 사용하는 경우 원래 개체 형식(System.Boolean)이 반환됩니다. System.Boolean 개체의 기본 형식으로 표시된 출력이 SideIndicator 속성을 표시하지 않은 방법을 확인합니다. 그러나 반환된 System.Boolean 개체에는 추가된 NoteProperty가 있습니다.

예제 4 - 속성을 사용하여 두 개의 단순 개체 비교

이 예제에서는 길이가 같은 두 개의 서로 다른 문자열을 비교합니다.

Compare-Object -ReferenceObject 'abc' -DifferenceObject 'xyz' -Property Length -IncludeEqual

Length SideIndicator
------ -------------
     3 ==

예제 5 - 속성을 사용하여 복합 개체 비교

이 예제에서는 복잡한 개체를 비교할 때의 동작을 보여줍니다. 이 예제에서는 PowerShell의 서로 다른 인스턴스에 대해 두 개의 서로 다른 프로세스 개체를 저장합니다. 두 변수 모두 이름이 같은 프로세스 개체를 포함합니다. Property 매개 변수를 지정하지 않고 개체를 비교할 때 cmdlet은 개체가 같은 것으로 간주합니다. InputObject값은 ToString() 메서드의 결과와 동일합니다. System.Diagnostics.Process 클래스에는 IComparable 인터페이스가 없으므로 cmdlet은 개체를 문자열로 변환한 다음 결과를 비교합니다.

PS> Get-Process pwsh

 NPM(K)    PM(M)      WS(M)     CPU(s)      Id  SI ProcessName
 ------    -----      -----     ------      --  -- -----------
    101   123.32     139.10      35.81   11168   1 pwsh
     89   107.55      66.97      11.44   17600   1 pwsh

PS> $a = Get-Process -Id 11168
PS> $b = Get-Process -Id 17600
PS> $a.ToString()
System.Diagnostics.Process (pwsh)
PS> $b.ToString()
System.Diagnostics.Process (pwsh)
PS> Compare-Object $a $b -IncludeEqual

InputObject                       SideIndicator
-----------                       -------------
System.Diagnostics.Process (pwsh) ==

PS> Compare-Object $a $b -Property ProcessName, Id, CPU

ProcessName    Id       CPU SideIndicator
-----------    --       --- -------------
pwsh        17600   11.4375 =>
pwsh        11168 36.203125 <=

비교할 속성을 지정하면 cmdlet에 차이점이 표시됩니다.

예제 6 - IComparable을 구현하는 복잡한 개체 비교

개체가 IComparable구현하는 경우 cmdlet은 개체를 비교하는 방법을 검색합니다. 개체가 다른 형식인 경우 Difference 개체는 ReferenceObject형식으로 변환된 다음 비교됩니다.

이 예제에서는 문자열을 TimeSpan 개체와 비교합니다. 첫 번째 경우 문자열은 개체가 같도록 TimeSpan 으로 변환됩니다.

Compare-Object ([TimeSpan]"0:0:1") "0:0:1" -IncludeEqual

InputObject SideIndicator
----------- -------------
00:00:01    ==

Compare-Object "0:0:1" ([TimeSpan]"0:0:1")

InputObject SideIndicator
----------- -------------
00:00:01    =>
0:0:1       <=

두 번째 경우 TimeSpan 은 문자열로 변환되므로 개체가 다릅니다.

매개 변수

-CaseSensitive

비교가 대/소문자를 구분해야 임을 나타냅니다.

형식:SwitchParameter
Position:Named
Default value:False
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-Culture

비교에 사용할 문화권을 지정합니다.

형식:String
Position:Named
Default value:None
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-DifferenceObject

참조 개체와 비교되는 개체를 지정합니다.

형식:PSObject[]
Position:1
Default value:None
필수:True
파이프라인 입력 허용:True
와일드카드 문자 허용:False

-ExcludeDifferent

이 cmdlet은 같은 비교된 개체의 특성만 표시됨을 나타냅니다. 개체 간의 차이는 무시됩니다.

IncludeEqual과 함께 ExcludeDifferent를 사용하여 참조 개체와 차이점 개체 간에 일치하는 줄만 표시합니다.

IncludeEqual 없이 ExcludeDifferent를 지정하면 출력이 없습니다.

형식:SwitchParameter
Position:Named
Default value:False
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-IncludeEqual

IncludeEqual은 참조 개체와 차이 개체 간의 일치 항목을 표시합니다.

기본적으로 출력에는 참조 개체와 차이점 개체 간의 차이점도 포함됩니다.

형식:SwitchParameter
Position:Named
Default value:False
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-PassThru

PassThru 매개 변수 Compare-Object사용하는 경우 비교된 개체 주위에 PSCustomObject 래퍼를 생략하고 변경되지 않은 다른 개체를 반환합니다.

형식:SwitchParameter
Position:Named
Default value:False
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-Property

비교할 참조차이점 개체의 속성 배열을 지정합니다.

Property 매개 변수의 값은 새 계산 속성일 수 있습니다. 계산된 속성은 스크립트 블록 또는 해시 테이블일 수 있습니다. 유효한 키-값 쌍은 다음과 같습니다.

  • 식 - <string> 또는 <script block>

자세한 내용은 about_Calculated_Properties 참조하세요.

형식:Object[]
Position:Named
Default value:None
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-ReferenceObject

비교를 위한 참조로 사용되는 개체의 배열을 지정합니다.

형식:PSObject[]
Position:0
Default value:None
필수:True
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-SyncWindow

개체 컬렉션에서 일치 항목을 Compare-Object 찾는 동안 검사하는 인접 개체의 수를 지정합니다. Compare-Object 는 컬렉션에서 동일한 위치에 있는 개체를 찾을 수 없는 경우 인접한 개체를 검사합니다. 기본값은 [Int32]::MaxValue전체 개체 컬렉션을 검사한다는 Compare-Object 의미입니다.

큰 컬렉션으로 작업할 때 기본값은 효율적이지 않을 수 있지만 정확합니다. SyncWindow에 더 작은 값을 지정하면 성능이 향상될 수 있지만 정확도가 낮을 수 있습니다.

형식:Int32
Position:Named
Default value:[Int32]::MaxValue
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

입력

PSObject

파이프라인 아래로 개체를 DifferenceObject 매개 변수로 보낼 수 있습니다.

출력

None

기본적으로 이 cmdlet은 ReferenceObject와 DifferenceObject같을 때 출력을 반환하지 않습니다.

PSCustomObject

개체가 다르면 이 cmdlet은 PSCustomObject 래퍼의 서로 다른 개체를 SideIndicator 속성으로 래핑하여 차이점을 참조합니다.

IncludeEqual 매개 변수를 사용하고 개체가 같으면 cmdlet은 SideIndicator 속성이 설정된 PSCustomObject래핑된 개체를 ==반환합니다.

PassThru 매개 변수사용하는 경우 개체의 형식은 변경되지 않지만 반환된 개체의 인스턴스에는 SideIndicator라는 추가 NoteProperty가 있습니다. SideIndicator 는 출력이 속한 입력 개체를 보여 줍니다.

참고

PowerShell에는 다음 별칭이 포함됩니다.Compare-Object

  • Windows:
    • compare
    • diff

PassThru 매개 변수를 사용하는 경우 콘솔에 표시되는 출력에 SideIndicator 속성이 포함되지 않을 수 있습니다. 개체 형식 출력에 Compare-Object 대한 기본 형식 보기에는 SideIndicator 속성이 포함되지 않습니다. 자세한 내용은 이 문서의 예제 3을 참조하세요.