Compare-Object

モジュール。 Microsoft.PowerShell.Utility

2 つのオブジェクトのセットを比較します。

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
-Culture

比較のために使用するカルチャーを指定します。

パイプライン入力にアクセスするようにしました。

Type: String
Position: Named
初期値: なし
False
Accept wildcard characters: False
-DifferenceObject

referenceオブジェクトと比較するオブジェクトを指定する。

Type: PSObject
Position: 1
初期値: None
パイプライン入力も受け入れるようにしました。 True
Accept Wildcard characters: False
-ExcludeDifferent

等しい比較オブジェクトの特性のみを表示するコマンドレットであることを指定します。 オブジェクト間の差は破棄されます。

IncludeEqual と共にExcludeDifferentを使用すると、参照オブジェクトと差分オブジェクト間で一致する行のみが表示されます。

Type: SwitchParameter
Position: Named
初期値: False
パイプライン入力も許可する(Active pipeline input: False
Accept wildcard characters: False
-IncludeEqual

IncludeEqual は参照と差分のオブジェクト間で一致するものを表示します。

デフォルトでは、参照オブジェクトと差分オブジェクトの間の差分も出力されます。

Type: SwitchParameter
Position: Named
初期値です。 False
Accept pipeline input: False
Accept wildcard characters.Noteは、パイプライン入力を受け入れることができます。 False
-PassThru

PassThru パラメータを使用すると、Compare-Object比較オブジェクトの PSCustomObject ラッパーを省略し、変更せずに差分オブジェクトが返されます。

Type: SwitchParameter
Position: Named
初期値: False
パイプライン入力に対応するように変更しました。 False
Accept wildcard characters: False
-Property

比較する参照と差分のオブジェクトのプロパティを配列で指定する。

Propertyパラメータの値には、新しい計算されたプロパティを指定することができます。 計算されたプロパティは、スクリプト ブロックまたはハッシュ テーブルにすることができます。 有効なキーと値のペアは、

  • Expression – <string> または <script block>

詳細については、about_Calculated_Properties を参照してください。

Type: Object
Position: Named
初期値: なし
パイプライン入力に同意しています。 False
Accept wildcard characters: False
-ReferenceObject

比較に参照として使用するオブジェクトの配列を指定します。

Type: PSObject
Position: 0
初期値: None
パイプライン入力も受け付けるようにしました。 False
Accept Wildcard characters: False
-SyncWindow

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

  • 選択オブジェクト
  • ソートオブジェクト
  • ティーオブジェクト
  • どこオブジェクト
  • 取得プロセス

コメントを残す

メールアドレスが公開されることはありません。