モジュール。 Microsoft.PowerShell.Utility
2 つのオブジェクトのセットを比較します。
- Syntax
- Description
- Examples
- Example 1 – Compare the content of two text files
- Example 2 – 各行の内容を比較し、差分を除外する
- Example 3 – PassThru パラメータを使用した場合の違いを示す
- Example 4 – Compare two simple objects using properties
- Example 5 – Comparing complex objects using properties
- Example 6 – Comparing complex objects that implement IComparable
- Inputs
- Outputs
- Notes
Syntax
Compare-Object <PSObject> <PSObject> >]
Description
Compare-Object
コマンドレットは、2 つのオブジェクト セットを比較します。 オブジェクトの1つのセットは参照で、オブジェクトのもう1つのセットは差分です。
Compare-Object
は、オブジェクト全体を比較するための利用可能なメソッドをチェックします。 もし適切なメソッドが見つからなければ、入力オブジェクトの ToString() メソッドを呼び出して、文字列の結果を比較する。 比較に使用するプロパティを1つまたは複数指定することができます。
比較の結果は、プロパティ値が参照オブジェクト (<=
) にのみ現れたか、または差分オブジェクト (=>
) にのみ現れたかを示します。 IncludeEqual パラメータが使用されている場合、(==
) は値が両方のオブジェクトにあることを示す。
もし参照または差分オブジェクトが null ($null
) であれば、Compare-Object
は終了エラーを生成する。
コードサンプルの行長を減らすために splatting を使用する例もある。 詳細については、about_Splatting を参照してください。
Examples
Example 1 – Compare the content of two text files
This example compares the contents of two text files.この例では、2 つのテキスト ファイルの内容を比較します。
-
Testfile1.txt
は値: dog, squirrel, and bird を含んでいます。 -
Testfile2.txt
は値: cat, bird, and 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 <=
Example 2 – 各行の内容を比較し、差分を除外する
この例では、ExcludeDifferent パラメータを使って、2つのテキストファイルの各行の内容を比較しています。
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 -ExcludeDifferentInputObject SideIndicator----------- -------------bird ==
Example 3 – PassThru パラメータを使用した場合の違いを示す
通常、Compare-Object
は次のプロパティを持つ PSCustomObject 型を返します。
- 比較される InputObject
- 出力がどの入力オブジェクトに属するかを示す SideIndicator プロパティ
PassThru パラメータを使用すると、オブジェクトの Type は変わりませんが、返されるオブジェクトのインスタンスには SideIndicator という NoteProperty が追加されます。 SideIndicator は、出力がどの入力オブジェクトに属するかを示します。
次の例は、異なる出力タイプを示します。
$a = $TrueCompare-Object -IncludeEqual $a $a(Compare-Object -IncludeEqual $a $a) | Get-MemberInputObject SideIndicator----------- ------------- True == TypeName: System.Management.Automation.PSCustomObjectName 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=TrueSideIndicator NoteProperty string SideIndicator===Compare-Object -IncludeEqual $a $a -PassThru(Compare-Object -IncludeEqual $a $a -PassThru) | Get-MemberTrue TypeName: System.BooleanName MemberType Definition---- ---------- ----------CompareTo Method int CompareTo(System.Object obj), int CompareTo(bool value), int IComparable.CompareTo(SystEquals Method bool Equals(System.Object obj), bool Equals(bool obj), bool IEquatable.Equals(bool otGetHashCode 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.ToToType 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 destination, int charsWritten)SideIndicator NoteProperty string SideIndicator===
PassThru を使用すると、元のオブジェクト タイプ (System.Boolean) が返されます。 System.Boolean オブジェクトの既定の書式で表示される出力が、SideIndicator プロパティを表示しないことに注意してください。
Example 4 – Compare two simple objects using properties
In this example are compare two different string that have the same length.
Compare-Object -ReferenceObject 'abc' -DifferenceObject 'xyz' -Property Length -IncludeEqualLength SideIndicator------ ------------- 3 ==
Example 5 – Comparing complex objects using properties
This example shows the behavior when comparing complex objects.The example 5 は、比較するときの動作を示しています。 この例では、PowerShell の異なるインスタンスの 2 つの異なるプロセス オブジェクトを保存しています。 両方の変数には、同じ名前のプロセス オブジェクトが含まれています。 Propertyパラメーターを指定せずにオブジェクトを比較した場合、コマンドレットは、オブジェクトが等しいと見なします。 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 pwshPS> $a = Get-Process -Id 11168PS> $b = Get-Process -Id 17600PS> $a.ToString()System.Diagnostics.Process (pwsh)PS> $b.ToString()System.Diagnostics.Process (pwsh)PS> Compare-Object $a $b -IncludeEqualInputObject SideIndicator----------- -------------System.Diagnostics.Process (pwsh) ==PS> Compare-Object $a $b -Property ProcessName, Id, CPUProcessName Id CPU SideIndicator----------- -- --- -------------pwsh 17600 11.4375 =>pwsh 11168 36.203125 <=
比較するプロパティを指定すると、cmdlet は相違点を表示します。
Example 6 – Comparing complex objects that implement IComparable
オブジェクトがIComparableを実装する場合、コマンドレットはオブジェクトを比較する方法を検索します。オブジェクトが異なるタイプの場合、 DifferenceオブジェクトはReferenceObjectのタイプに変換されてから比較されます。 最初のケースでは、文字列は TimeSpan に変換されるので、オブジェクトは等しくなります。
Compare-Object ("0:0:1") "0:0:1" -IncludeEqualInputObject SideIndicator----------- -------------00:00:01 ==Compare-Object "0:0:1" ("0:0:1")InputObject SideIndicator----------- -------------00:00:01 =>0:0:1 <=
2 番目のケースでは、TimeSpan は文字列に変換されるので、オブジェクトは異なっています。
Type: | SwitchParameter |
Position: | Named |
初期値: | False |
パイプライン入力を許可する。 | False |
Accept wildcard characters: | False |
比較のために使用するカルチャーを指定します。
Type: | String |
Position: | Named |
初期値: | なし |
False | |
Accept wildcard characters: | False |
referenceオブジェクトと比較するオブジェクトを指定する。
Type: | PSObject |
Position: | 1 |
初期値: | None |
パイプライン入力も受け入れるようにしました。 | True |
Accept Wildcard characters: | False |
等しい比較オブジェクトの特性のみを表示するコマンドレットであることを指定します。 オブジェクト間の差は破棄されます。
IncludeEqual と共にExcludeDifferentを使用すると、参照オブジェクトと差分オブジェクト間で一致する行のみが表示されます。
Type: | SwitchParameter |
Position: | Named |
初期値: | False |
パイプライン入力も許可する(Active pipeline input: | False |
Accept wildcard characters: | False |
IncludeEqual は参照と差分のオブジェクト間で一致するものを表示します。
デフォルトでは、参照オブジェクトと差分オブジェクトの間の差分も出力されます。
Type: | SwitchParameter |
Position: | Named |
初期値です。 | False |
Accept pipeline input: | False |
Accept wildcard characters.Noteは、パイプライン入力を受け入れることができます。 | False |
PassThru パラメータを使用すると、Compare-Object
比較オブジェクトの PSCustomObject ラッパーを省略し、変更せずに差分オブジェクトが返されます。
Type: | SwitchParameter |
Position: | Named |
初期値: | False |
パイプライン入力に対応するように変更しました。 | False |
Accept wildcard characters: | False |
比較する参照と差分のオブジェクトのプロパティを配列で指定する。
Propertyパラメータの値には、新しい計算されたプロパティを指定することができます。 計算されたプロパティは、スクリプト ブロックまたはハッシュ テーブルにすることができます。 有効なキーと値のペアは、
- Expression –
<string>
または<script block>
詳細については、about_Calculated_Properties を参照してください。
Type: | Object |
Position: | Named |
初期値: | なし |
パイプライン入力に同意しています。 | False |
Accept wildcard characters: | False |
比較に参照として使用するオブジェクトの配列を指定します。
Type: | PSObject |
Position: | 0 |
初期値: | None |
パイプライン入力も受け付けるようにしました。 | False |
Accept Wildcard characters: | False |
Compare-Object
Object Collectionで一致を検索する際に検査する隣接オブジェクト数を指定します。 Compare-Object
は、コレクション内の同じ位置にあるオブジェクトが見つからない場合、隣接するオブジェクトを検査する。 デフォルト値は::MaxValue
で、これはCompare-Object
がオブジェクト・コレクション全体を検査することを意味する。
Type: | Int32 |
Position: | Named |
初期値: | ::MaxValue |
パイプライン入力に対応するようにしました。 | False |
Accept wildcard characters: |
Inputs
PSObject
DifferenceObjectパラメータにパイプラインでオブジェクトを送信できるようにしました。
Outputs
None
参照オブジェクトと差分オブジェクトが同じ場合、IncludeEqual パラメータを使用しない限り、出力はありません。
PSCustomObject
オブジェクトが異なる場合、Compare-Object
は、差分を参照するための SideIndicator プロパティを持つ PSCustomObject
ラッパーで差分オブジェクトをラップします。
PassThru パラメータを使用すると、オブジェクトのタイプは変わりませんが、返されるオブジェクトのインスタンスは SideIndicator という NoteProperty が追加されます。 SideIndicator は、出力がどの入力オブジェクトに属するかを示します。
Notes
PassThru パラメータを使用すると、コンソールに表示される出力に SideIndicator プロパティが含まれない場合があります。 Compare-Object
によって出力されるオブジェクト タイプのデフォルトのフォーマット ビューには、SideIndicator プロパティが含まれません。 詳細については、この記事のExample 3を参照してください。
- about_Calculated_Properties
- ForEach-Object
- Group-Object
- Measure-Object
- New->
- Object
- Object
- Measure->
- New->
- Object
- 選択オブジェクト
- ソートオブジェクト
- ティーオブジェクト
- どこオブジェクト
- 取得プロセス
Object
。