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 |
입력
파이프라인 아래로 개체를 DifferenceObject 매개 변수로 보낼 수 있습니다.
출력
None
기본적으로 이 cmdlet은 ReferenceObject와 DifferenceObject가 같을 때 출력을 반환하지 않습니다.
개체가 다르면 이 cmdlet은 PSCustomObject 래퍼의 서로 다른 개체를 SideIndicator 속성으로 래핑하여 차이점을 참조합니다.
IncludeEqual 매개 변수를 사용하고 개체가 같으면 cmdlet은 SideIndicator 속성이 설정된 PSCustomObject에 래핑된 개체를 ==
반환합니다.
PassThru 매개 변수를 사용하는 경우 개체의 형식은 변경되지 않지만 반환된 개체의 인스턴스에는 SideIndicator라는 추가 NoteProperty가 있습니다. SideIndicator 는 출력이 속한 입력 개체를 보여 줍니다.
참고
PowerShell에는 다음 별칭이 포함됩니다.Compare-Object
- Windows:
compare
diff
PassThru 매개 변수를 사용하는 경우 콘솔에 표시되는 출력에 SideIndicator 속성이 포함되지 않을 수 있습니다. 개체 형식 출력에 Compare-Object
대한 기본 형식 보기에는 SideIndicator 속성이 포함되지 않습니다. 자세한 내용은 이 문서의 예제 3을 참조하세요.
관련 링크
PowerShell